Threads
 Threads  However, the use of blocking system calls in user threads (as opposed to kernel threads)  or fibers can be problematic. If a user thread or a fiber performs a system call that blocks, the other user threads and fibers in the process are unable to run until the system call returns       . A typical example of this problem is when performing I/O: most programs are written to perform I/O synchronously. When an I/O operation is initiated, a system call is made, and does not return until the I/O operation has been completed. In the  intervening period , the entire process is "blocked" by the kernel and cannot run, which starves other user threads and fibers in the same process from executing.   A common solution to this problem is providing an I/O API that implements a synchronous interface by using non-blocking I/O internally, and scheduling another user thread or fiber while the I/O operation is in progress. Similar solutions can be provided for other blocking system c...