Process is nothing but a program in execution. Memory layout of a program consists of
1. Text Section : This section contains the code of a program.
2. Initialized Data Section : This section contains initialized global data.
3. Uninitialized Data Section : This section contains uninitialized global data.
4. Stack : This section contains auto variables.
5. Heap : This section is used to get memory dynamically.
If you have only a single process with main() thread only then there will be a single flow of execution and parallel execution can't be
achieved even having multiple functions.
Thread is a light weight process and by using multiple threads within a program, multiple function or the same function can be run simultaneously. There is a minimum overhead of a thread creation comparison to process creation. A thread shares code, data (initialized and uninitialized) and heap section with main thread / process.