为了解释更多,假设我们有一个没有超线程的双核 CPU,这意味着它只能同时处理 2 个线程,好吧,现在假设我们有一个网络应用程序运行两个后台网络线程,每个线程都在等待传入的连接处理,所以这些线程应该一直运行,现在,为什么另一个操作系统的进程和线程仍在工作?!在我看来,它们无法被处理,因为有两个线程完全耗尽了 CPU 处理单元,因为它们正在等待网络传入连接,因此,它们应该每纳秒准备好连接......这是如何发生和工作的?CPU如何一次处理许多线程而没有任何明显的冻结?!(我知道,有时,如果同时运行大量繁重的程序,Windows 会变得缓慢而疯狂,
谢谢。
答案相对简单:当一个线程正在等待 I/O 事件时,它将剩余的时间片交给操作系统,然后操作系统可以调度另一个线程。当高延迟 I/O 完成时,线程被标记为准备好执行。
这在很大程度上是可能的,因为大多数 I/O 是通过中断管理的,而不是反复检查 I/O 请求是否已完成(称为轮询)。
归档时间: |
|
查看次数: |
420 次 |
最近记录: |