The many-to-many model suffers from neither of these shortcomings: developers can create as many user threads as necessary,
and the corresponding kernel threads can run in parallel on a multiprocessor. Also, when a thread performs a blocking system call,
the kernel can schedule another thread for execution.