From a conceptual level, you can consider processes and threads to be very analogous. The main difference is that usually threads will only have access to memory contained within the process that spawned it, and processes make for an easy way to kill a bundle of threads. So while an operating system spawns multiple processes, a process spawns multiple threads. I'm sure someone can pick apart those two statements, but I find them to be true on the surface at the very least.
I have to start by answering your third question, to give you a better context for your other questions. Threads and processes start in the RUNNABLE
state, which means it may be selected by the thread/process scheduler as the next thread/process to be run on a given core. Once it has been selected, it is loaded into that core's context and enters the RUNNING
state. This continues until the thread/process has completed its operation and dies, or it waits on a condition. That wait puts it in the BLOCKED
state. Once that condition is lifted, it enters the RUNNABLE
state (even if that condition becomes true later!)
For your first question, you can spawn as many processes and threads as you have system resources for, but only one per virtual core will be RUNNING
at any given time. (This is the selection process outlined above.) Note when I say virtual core, I mean what the operating system reports as a core. Advanced technologies allow us to put what appears to be multiple cores on the same core. So you may have a 4-core system with dual hyper-threading which will report 8 cores to the operating system. This is an abstraction that we typically are not concerned with - we just care about how many cores the operating system says we have and go with that.
For your second question, parallelism is possible with both, but you'll need to manage their memory different. Processes will often use the file system or a database to share their memory (although inter-process communication is possible, it's just more difficult in my experience). Threads have the advantage of a shared memory space, but that also means they must be on the same system - with a database accessible from different machines, you can parallelize processes on different machines.