Winapi Windows API readFile是如何实现的?

Winapi Windows API readFile是如何实现的?,winapi,disk,Winapi,Disk,我听说用汇编语言读取文件有两种方法:一种需要CPU在一个周期内反复查询磁盘读取完成状态;另一种方法是在磁盘读取完成时使用中断回调,并且在读取过程中不需要CPU 我想知道的是:如果我使用WinAPI readFile从文件中读取大量数据(如千兆字节),它会占用大量CPU时间进行磁盘状态查询吗?我认为OP指的是执行轮询的磁盘驱动程序与中断驱动驱动程序之间的差异 使用轮询的驱动程序几乎总是以尽可能低的优先级进行轮询-基本上与Windows的空闲线程具有相同的优先级。这些司机也很少见。它们只适用于吞吐量

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


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

我认为OP指的是执行轮询的磁盘驱动程序与中断驱动驱动程序之间的差异

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

虽然轮询驱动程序可能会在负载较轻的系统上占用大量CPU周期,但它不会从更重要的任务中抽出时间(而且一切都会更重要)。它对CPU的使用不会反映在像Taskmgr这样的实用程序中。实际上,你可能不知道它使用了很多循环

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


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

Windows肯定支持异步I/O模型,在等待主机控制器的回复时不使用CPU。如果您看到的是不同的,那么它一定是特定于您的系统的一个非常糟糕的驱动程序。除非文件被压缩,否则解压缩将使用CPU时间。“需要CPU反复查询磁盘读取完成状态”-听起来像是不熟悉异步I/O编程的人生成的实现。也许你听错人了。