gpt4 book ai didi

file-io - 读取大文件时是否消耗CPU

转载 作者:行者123 更新时间:2023-12-02 15:30:08 24 4
gpt4 key购买 nike

假设我想在我的2核机器上进行以下操作:

  1. 读取非常大的文件

  2. 计算

文件读取操作需要消耗1核吗?以前我只创建 2 个线程,一个用于读取文件,一个用于计算?我应该创建一个额外的线程来进行计算吗?

谢谢。

编辑

谢谢大家,是的,我们应该始终考虑文件 I/O 是否会阻塞计算。现在我们只考虑文件 I/O 永远不会阻塞计算,你可以认为计算不依赖于文件的数据,我们只是读入文件以供将来处理。现在我们有2个核心,我们需要读入一个文件,并且我们需要进行计算,创建3个线程是最好的解决方案,1个用于文件读取,2个用于计算,正如大多数人已经指出的那样:文件读取消耗的CPU很少?

最佳答案

这取决于您的硬件配置方式。通常情况下,读取不是CPU密集型的,这要归功于DMA 。但是,如果它启动其他应用程序的换出,则可能会非常昂贵。但还有更多内容。

如果可以的话,不要一次读取大文件

如果你的文件很大,你应该使用 mmap或顺序处理,当您不需要一次读取整个文件时。尝试分块消耗它是可能的。

例如,要对一个大文件中的所有值求和,您不需要将该文件加载到内存中。您可以将其分成小块进行处理,累积总和。在大多数情况下,内存是一种昂贵的资源。

读取是连续的

Does the file reading operation need to consume 1 core?

是的,我认为大多数低级读取操作都是按顺序实现的(消耗 1 个核心)。

如果使用asynchronous I/O,则可以避免读取操作阻塞。 ,但这只是同一“小块读取”技术的变体。您可以一次启动多个小型异步读取操作,但在使用结果之前必须始终检查操作是否已完成。

另请参阅 Stack Overflow answer相关问题)。

并行读取和计算

Previously I just create 2 threads, one to read file and one to compute? Should I create an additional thread to do compute?

这取决于,如果您需要所有数据来开始计算,则没有理由开始并行计算。它必须有效地等待,直到读取完成。

如果您甚至可以使用部分数据开始计算,那么您可能不需要立即读取整个文件。对于大文件通常最好不要这样做。

你的瓶颈是什么——计算还是IO?

最后,您应该知道您的任务是计算密集型还是输入输出密集型。如果受到输入输出子系统性能的限制,并行计算的好处就很少。如果计算非常消耗 CPU 资源,并且读取时间可以忽略不计,那么您可以从并行计算中受益。输入输出通常是一个瓶颈,除非您正在进行一些数字运算。

关于file-io - 读取大文件时是否消耗CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2140227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com