首页 > 解决方案 > 操作系统是否挂起在 IO 上阻塞的线程

问题描述

因此,当一个线程执行昂贵的 IO 操作时,我知道它被阻塞(在 IO 完成之前不会再处理任何指令)。我想知道的是操作系统是否经过优化以实际挂起该线程并且在该 IO 操作完成之前不调度它。

所以本质上的问题是,在 IO 上阻塞的线程是否继续占用 CPU 周期什么都不做,或者操作系统是否会挂起它并在它准备好时将其唤醒?

标签: iooperating-systemblockingsuspend

解决方案


所以本质上的问题是,在 IO 上阻塞的线程是否继续占用 CPU 周期什么都不做,或者操作系统是否会挂起它并在它准备好时将其唤醒?

通常,当一个任务被阻塞(等待 IO,或时间,或互斥锁,或...)时,调度程序被告知要找到其他事情要做,然后切换到另一个任务(如果有的话)或将 CPU 放入某个一种省电状态(如果没有其他任务);并且调度程序不会给任务任何 CPU 时间,直到它被解除阻塞(直到它正在等待的事情发生)或发生异常情况(例如signal取消 IO)。

我见过的唯一不同的情况是没有调度程序的单任务操作系统。在这种情况下,没有“阻塞”状态,通常唯一的任务只是忙等待。


推荐阅读