我一直在读恐龙的书,被这个特别的模型弄糊涂了。
书中说,对于一对多的模型,“线程管理是在用户空间中由线程库完成的,因此是有效的;但是如果一个线程进行阻塞系统调用,整个进程将被阻塞。而且,由于一次只能访问一个线程,多个线程无法在多处理器上并行运行。”
我感到困惑的是,如果进行阻塞系统调用,那么整个进程会阻止什么呢?这是否意味着如果我有一个多线程程序和其中一个线程块,那么它的所有线程都必须等待,从而有效地延缓程序的运行?
如果正在执行的程序导致使用此模型的块,是否意味着由于内核线程阻塞而不能交换另一个单独的程序来执行?如果答案是肯定的,那么另一个程序(进程)可以被交换,而不是为什么一个多线程程序不能在阻塞线程被迫等待的时候简单地执行另一个线程?
发布于 2014-03-17 23:17:36
如果您在用户级别管理线程,这意味着交换是由应用程序完成的,而不是由OS调度程序完成的。每个线程必须到达他向管理机制提交(或失去)控制的某个点,但该机制也是用户级别的,因此如果其中一个线程正在执行系统调用--您的线程管理系统(以及其他所有线程)必须等待内核代码完成。
操作系统始终处于活动状态,并且可能会抢占整个程序,因此其他进程不会挨饿,只有内部“线程”您自己管理。这些线程不能在该块期间启动,因为负责启动它们的机制也会被内核阻塞。
https://stackoverflow.com/questions/22467248
复制相似问题