1. Keep Tasks Short and Nonblocking. Thread pool tasks should be as small as possible, but no smaller.
One reason to prefer making tasks short is because short tasks can spread more evenly and thus use hardware resources well.
2. One to one relationship of user level thread to the kernel level thread.This model provides more concurrency than the many to one model. It also another thread to run when a thread makes a blocking system call. It support multiple thread to execute in parallel on microprocessors.
3. Processes: an application consists of one or more processes.
A process, in the simplest terms, is an executing program.
Threads: one or more threads run in the context of the process.
thread is the basic unit to which the operating system allocates processor time. A thread can execute any part of the process code, including parts currently being executed by another thread.