我正在阅读现代操作系统(第四版)。我不太确定这一段。
尽管性能更好,用户级线程包仍然存在一些主要问题。其中首先是如何实现阻塞系统调用的问题。假设一个线程在按下任何键之前从键盘读取数据。让线程实际进行系统调用是不可接受的,因为这将停止所有线程。
如果一个线程阻塞等待输入,另一个线程就不能去做其他事情吗?为什么它会“停止所有线程”?
用户级线程在用户代码中实现;它们不是由内核单独调度的。所有用户级线程都在单个内核计划任务的上下文中运行,因此一个线程不能抢占另一个线程。因此,当用户线程进行系统调用时,它会阻塞,并且另一个用户线程(在同一内核计划任务中)无法执行。
请注意,这不是大多数线程在现代操作系统上的工作方式。Linux 上的 pthread 和 NT 内核上 CreateThread 创建的线程由内核单独调度。
| 归档时间: |
|
| 查看次数: |
2163 次 |
| 最近记录: |