假设有一些代码可以读取多个使用者的文件,并且文件的大小是任意的:异步读取文件的效率如何提高?或者换一种说法,要同步读取文件,文件必须快到多小?
我注意到(也许我不正确),当读取非常小的文件时,异步读取它们比同步读取(尤其是.NET)需要更长的时间。我假设这与设置时间有关,例如I / O完成端口,线程等。
有什么经验法则可以帮助您吗?还是取决于系统和环境?
假设有一些代码可以读取多个使用者的文件,并且文件的大小是任意的:异步读取文件的效率如何提高?或者换一种说法,要同步读取文件,文件必须快到多小?
我注意到(也许我不正确),当读取非常小的文件时,异步读取它们比同步读取(尤其是.NET)需要更长的时间。我假设这与设置时间有关,例如I / O完成端口,线程等。
有什么经验法则可以帮助您吗?还是取决于系统和环境?
Answers:
不幸的是,答案是“取决于情况”。您可以编写一个小程序凭经验确定异步读取和同步读取的时间,这很容易。
这将取决于许多因素。它们是否存储在旋转磁盘,SSD或网络驱动器上?您使用哪种CPU?多少个插座/芯?您是在VM还是裸机上运行?您正在运行古老的操作系统还是现代的操作系统?
异步具有3个主要优点:
我相信异步读取的主要优点是当您处理大量文件或需要大量CPU能力时。
blocked waiting for I/O
(0%CPU)更改为continue normal processing
(> 0%CPU)。
我不确定是否有特定的“要点”,但是当您有很多线程在工作时,这才是最有意义的,因为它使您可以将I / O与其他工作重叠。如果您有空闲的空闲线程,那么异步读取不会给您带来任何好处。只有当工作队列填满并且线程可以有效地执行其他工作而不是等待I / O时,异步文件访问才可以发挥任何优势。