Windows API readFile 是如何实现的?
How does Windows API readFile implemented?
听说汇编语言读取一个文件有两种方法:一种是需要CPU在一个循环中反复查询磁盘读取完成状态;另一种方式是在磁盘读取完成时使用中断回调,并且在读取过程中不需要CPU。
我想知道的是:如果我使用 WinAPI readFile 从文件中读取大量数据(例如千兆字节),它会占用很多 CPU 磁盘状态查询时间吗?
我认为 OP 指的是执行轮询的磁盘驱动程序与中断驱动的驱动程序之间的区别。
使用轮询的驱动程序几乎总是以尽可能低的优先级执行 - 基本上与 Windows' 空闲线程的优先级相同。这些驱动程序也很少见。它们只适用于吞吐量比响应时间重要得多的系统。
虽然轮询驱动程序在负载较轻的系统上可能需要很多 CPU 周期,但它不会占用更重要任务的时间(而且一切都会更重要)。而且 CPU 的使用不会反映在 Taskmgr 等实用程序中。实际上,您可能不知道它使用了很多周期。
驱动判断I/Os是否完成的方法与应用是否使用ReadFile无关。应用程序对磁盘驱动程序的运行方式没有任何选择。如果应用程序需要访问驱动程序控制器磁盘上的文件,则它必须(间接)使用该磁盘的驱动程序。
作为应用程序开发人员,您确实有两个选择:ReadFile(几乎所有其他读取 API 最终都会通过此 API)或内存映射 I/O。了解两者之间的权衡最好通过谷歌搜索和查找 MSDN 上的主题来实现。
听说汇编语言读取一个文件有两种方法:一种是需要CPU在一个循环中反复查询磁盘读取完成状态;另一种方式是在磁盘读取完成时使用中断回调,并且在读取过程中不需要CPU。
我想知道的是:如果我使用 WinAPI readFile 从文件中读取大量数据(例如千兆字节),它会占用很多 CPU 磁盘状态查询时间吗?
我认为 OP 指的是执行轮询的磁盘驱动程序与中断驱动的驱动程序之间的区别。
使用轮询的驱动程序几乎总是以尽可能低的优先级执行 - 基本上与 Windows' 空闲线程的优先级相同。这些驱动程序也很少见。它们只适用于吞吐量比响应时间重要得多的系统。
虽然轮询驱动程序在负载较轻的系统上可能需要很多 CPU 周期,但它不会占用更重要任务的时间(而且一切都会更重要)。而且 CPU 的使用不会反映在 Taskmgr 等实用程序中。实际上,您可能不知道它使用了很多周期。
驱动判断I/Os是否完成的方法与应用是否使用ReadFile无关。应用程序对磁盘驱动程序的运行方式没有任何选择。如果应用程序需要访问驱动程序控制器磁盘上的文件,则它必须(间接)使用该磁盘的驱动程序。
作为应用程序开发人员,您确实有两个选择:ReadFile(几乎所有其他读取 API 最终都会通过此 API)或内存映射 I/O。了解两者之间的权衡最好通过谷歌搜索和查找 MSDN 上的主题来实现。