最近我开始(再次)阅读 Tanenbaum 的“Modern Operating Systems 4ed”,我有点卡在第 2 章讨论进程和线程。特别是我对列出所有优点和缺点的用户空间线程子章节感到困惑。
这是支持用户空间线程的直接引用:
用户级线程还有其他优点。它们允许每个进程拥有自己定制的调度算法。对于某些应用程序,例如具有垃圾收集器线程的应用程序,不必担心线程在不方便的时刻被停止是一个优点。它们还可以更好地扩展,因为内核线程总是需要内核中的一些表空间和堆栈空间,如果有大量线程,这可能是一个问题。
我理解它的方式是每个使用线程的进程(因此创建/销毁它们)负责实现这些线程的调度以使它们高效。例如,具有预定义的短时间间隔的简单循环。
然而,稍后在子章节中,我们得到了缺点的引用。它来了:
用户级线程包的另一个问题是,如果一个线程开始运行,除非第一个线程自愿放弃 CPU,否则该进程中的其他线程将永远不会运行。在单个进程中,没有时钟中断,因此无法以循环方式(轮流)调度进程。除非线程自愿进入运行时系统,否则调度程序永远不会有机会。
嗯,WTF?因此,在专业方面,拥有线程的进程 OWN 调度程序是一个优势,在这里似乎无论是否有定制的调度程序 - 它都不会按预期工作,因为线程是贪婪的。
我的问题是:当使用用户空间线程以相同的方式实际调度线程时,进程的调度程序是否不可能?还是我的英语不够好,无法在这里抓住要点。
PS。在查看已发布的问题时,建议我阅读此 - User-level threads for threading。Tanenbaum 的模型适用于旧系统的说法不正确吗?这本书于 2014 年出版,所以这可能是一回事。