操作系统.多线程模型.一对多模型



我一直在看恐龙的书,对这个特殊的模型感到困惑。

书上说,对于一对多模型,"线程管理是由线程库在用户空间中完成的,所以它是高效的;但是,如果线程进行阻塞系统调用,整个进程将阻塞。而且,由于一次只有一个线程可以访问内核,因此多个线程无法在多处理器上并行运行。

我感到困惑的是,如果进行阻塞系统调用,整个进程将阻塞是什么意思?这是否意味着,如果我有一个多线程程序,其中一个线程阻塞,那么它的所有线程将不得不等待,有效地使程序停滞?

如果一个正在执行的程序在这个模型下导致阻塞,是否意味着另一个单独的程序不能被交换进来执行,因为内核线程阻塞了?如果答案是肯定的,另一个程序(进程)可以交换,那么为什么一个多线程程序不能简单地执行另一个线程,而阻塞线程被迫等待?

如果您在用户级别管理线程,则意味着交换是由应用程序完成的,而不是由操作系统调度器完成的。每个线程都必须达到将控制权交给(或失去)管理机制的某个点,但该机制也是用户级的,因此如果其中一个线程正在执行系统调用-您的线程管理系统(以及所有其他线程)必须等待,直到内核代码完成。

操作系统始终处于活动状态,并且可能仍然会抢占整个程序,因此其他进程不会饿死,只有你自己管理的内部"线程"。这些线程不能在阻塞期间启动,因为负责启动它们的机制也被内核阻塞了。

最新更新