io - 操作系统是否挂起在 IO 上阻塞的线程
问题描述
因此,当一个线程执行昂贵的 IO 操作时,我知道它被阻塞(在 IO 完成之前不会再处理任何指令)。我想知道的是操作系统是否经过优化以实际挂起该线程并且在该 IO 操作完成之前不调度它。
所以本质上的问题是,在 IO 上阻塞的线程是否继续占用 CPU 周期什么都不做,或者操作系统是否会挂起它并在它准备好时将其唤醒?
解决方案
所以本质上的问题是,在 IO 上阻塞的线程是否继续占用 CPU 周期什么都不做,或者操作系统是否会挂起它并在它准备好时将其唤醒?
通常,当一个任务被阻塞(等待 IO,或时间,或互斥锁,或...)时,调度程序被告知要找到其他事情要做,然后切换到另一个任务(如果有的话)或将 CPU 放入某个一种省电状态(如果没有其他任务);并且调度程序不会给任务任何 CPU 时间,直到它被解除阻塞(直到它正在等待的事情发生)或发生异常情况(例如signal
取消 IO)。
我见过的唯一不同的情况是没有调度程序的单任务操作系统。在这种情况下,没有“阻塞”状态,通常唯一的任务只是忙等待。
推荐阅读
- node.js - firebasestorage.googleapis.com 和 storage.googleapis 的媒体链接之间的区别?
- r - R改变Y轴的dplyr距离
- java - 在 Windows 中,线程会被 Process.destroy() 阻塞,直到进程被销毁?
- sql - 何时在(Postgre)SQL 语句中使用/不使用子句顺序
- python - 如何让 Selenium 等到页面完成加载后再继续?
- pepper - 带有“动画失败”的本地化和映射错误。
- c - Linux Kernel Makefile.build 构建外部模块时的奇怪行为
- asp.net-core - 我可以将接口实例传递给 .net 核心中的属性吗?
- c# - Azure 服务总线 - 长时间运行的任务引发 Microsoft.Azure.ServiceBus.MessageLockLostException
- reactjs - 如何在 reactjs 中使用受保护的路由保护我的页面