A1:
(1.) The number of threads in the pool can be set heuristically based upon system factors.
(2.) More sophisticated thread-pool architectures can dynamically adjust the number of threads in the pool according to usage patterns.
A2:
One-to-one model provides more concurrency. It also another thread to run when a
thread makes a blocking system call. It support multiple thread to execute in parallel on microprocessors.
A3:
(1.) Threads share the address space of the process that created it; processes have their own address space.
(2.) Threads have direct access to the data segment of its process; processes have their own copy of the data segment of the parent process.
(3.) Threads can directly communicate with other threads of its process; processes must use inter-process communication to communicate with sibling processes.
(4.) Threads have almost no overhead; processes have considerable overhead.
(5.) New threads are easily created; new processes require duplication of the parent process.
(6.) Threads can exercise considerable control over threads of the same process; processes can only exercise control over child processes.
(7.) Changes to the main thread (cancellation, priority change, etc.) may affect the behavior of the other threads of the process; changes to the parent process does not affect child processes.