c++ - Windows 操作系统的 I/O 优先级
问题描述
我正在学习 Jeffrey Richter Book(Windows via C/C++)。在一节中,他谈到了 I/O 优先级。我现在知道什么是优先级,什么是优先级、优先级以及基本优先级。
我知道,我可以使用 SetPriorityClass 和 SetThreadPriority 更改进程和线程的优先级,但我无法理解 I/O 优先级在 Windows 10 中的工作方式,或者优先级如何帮助我们微调适用于基于存储的设备的应用程序性能缓慢。
例如,当我有一个与存储设备一起工作的线程时,当我设置它的优先级 THREAD_MODE_BACKGROUND_BEGIN 时会发生什么?能不能简单解释一下?我也完全阅读了这篇论文(链接),但我无法理解 I/O 的优先级。
解决方案
如该论文所述,由 I/O 设备驱动程序根据线程优先级来处理优先级,并且在该论文发表时,只有两个级别,正常和背景,设备驱动程序可能会忽略它们。
设备驱动程序可以通过两个 I/O 请求队列实现两个优先级,一个用于正常优先级,另一个用于后台优先级。驱动程序还可以包含逻辑,以防止正常队列完全锁定后台队列,方法是偶尔根据时间或请求计数处理来自后台队列的请求,即使正常队列不是空的。
该论文是一篇旧论文,指的是Vista。到目前为止,对于 Windows 10,可能有两个以上的 I/O 优先级。
推荐阅读
- wpf - 在 Prism 中扩展 DialogService
- apache - 将索引重定向到地址栏不变的另一个页面
- python - 如何以编程方式获取 Pepper Robot 的状态?
- javascript - 如何在Javascript中用reduce替换map和filter
- reactjs - 如何通过使用 Hooks 在 ReactJS 中单击一个按钮来获得多个 ckEditor?
- mysql - 无法在 bundle install ruby 上安装 mysql2
- masstransit - MassTransit 消费失败
- javascript - 当你的组件被传递连接时如何访问节点?
- swift - 我想在 Swift 中使用 Alamofire 制作一个跟随响应的模型。并显示数据。如何?
- docker - 对 cgroup 进程的 docker 间歇性故障问题进行故障排除