(C) is correct!
(A) and (D) and not correct/ nor are they a primary difference!
That leaves us with (B) and (C)
See this https://stackoverflow.com/questions/4894609/will-a-cpu-process-have-at-least-one-thread
For example, in the Linux kernel, the creation of a process is little different to creating a new thread. That's because the kernel schedules threads rather than processes.
Processes are now considered to be groups of threads with the same thread group ID (TGID), that TGID being the thread ID (TID) of the first thread created for that process.
#1)When you fork
or vfork
or clone
(without CLONE_THREAD
), you get a new thread with a new TID and the TGID is set to that TID - that's a new process.
#2)When you clone
with CLONE_THREAD
, you get a new thread with a new TID but the TGID remains the same as your cloner. That's a different thread in the same process.
That's how Linux (as an example) distinguishes between processes and threads without having to make the scheduler too complicated. The scheduler can choose to ignore thread groups entirely if it wishes. It's actually incredibly clever.
Now having known that consider option (B)
The amount of overhead associated with creation and context switching
Now we can understand that there's not much overhead associated with creation of a process and thread.
However we definitely know that (C) The amount of memory allocation for a new process is greater than a new thread! because threads share address space!.
Hence answer is (c).