Windows API readFile是如何实现的?

时间:2015-12-17 03:32:49

标签: winapi disk

我听说有两种方法可以用汇编语言读取文件:一种是要求CPU在一个循环中反复查询磁盘读取完成状态;另一种方法是在磁盘读取完成时使用中断回调,并且在读取过程中不需要CPU。

我想知道的是:如果我从使用WinAPI readFile的文件中读取大量数据(例如千兆字节),它是否会占用大量CPU时间进行磁盘状态查询?

1 个答案:

答案 0 :(得分:1)

我认为OP指的是执行轮询和中断驱动的驱动程序的磁盘驱动程序之间的区别。

使用轮询的驱动程序几乎总是以尽可能低的优先级执行此操作 - 基本上与Windows的空闲线程具有相同的优先级。这些驱动因素也很少见。它们只适用于吞吐量比响应时间重要得多的系统。

虽然轮询驱动程序可能会在轻负载系统上占用大量CPU周期,但是从更重要的任务中解放并不需要时间(而且一切都会更重要)。它的CPU使用率不会反映在Taskmgr等实用程序中。实际上你可能不会知道它使用了很多周期。

驱动程序用于确定I / O是否已完成的方法与应用程序是否使用ReadFile无关。应用程序在磁盘驱动程序的运行方式上没有任何选择。如果应用程序需要访问驱动器控制器磁盘上的文件,那么它必须(间接)使用该磁盘的驱动程序。

作为一名应用程序开发人员,您确实有两种选择:ReadFile(几乎所有其他读取API最终通过此API)或内存映射I / O.了解两者之间的权衡最好通过谷歌搜索和查找MSDN上的主题来实现。