用C语言进行多线程读取和打印很大的文件

我有一个很大的文件要阅读并执行以下操作。

  1. 打开大文件(> 50MB)并逐行读取
  2. 执行一些比较操作
  3. 打印比较结果
  4. 返回

当我在单线程C代码中执行上述序列时,它可以正常工作,现在我试图通过创建3个线程(我有使用3个线程来使此过程更快的任务)来使用多线程来使其更快。读取并比较,但是我做不到,因为我发现它只是重复了一些比较。

我是否可以使用3个线程读取文件的3个不同部分并执行某些操作?

zyyzyyzhaoyiying 回答:用C语言进行多线程读取和打印很大的文件

请注意,此答案是“ 技巧”(或者可能是作业是技巧吗?),因为它并没有真正使过程更快。答案假定具有合理(4G +)内存的标准Linux计算机。

简短答案:在任何半适当的配置中,数据都会移入OS缓冲区,而问题实际上是CPU约束,而不是IO约束。

长答案:

尽管50MB的文件对于人类来说是“大”的,但对于每台现代计算机而言,它都是“小”的。实际上,除非系统需要内存来执行其他任务,否则数据将移入OS缓冲区并保持在那里。

鉴于数据位于(OS)内存中,问题(不是初始调用)不是IO绑定的,而是CPU的。对于此3线程MT程序将发挥作用。问题成为如何将工作分散到3个文件中。理想情况下,这3个线程会将文件划分为3个(几乎)相等的块,每个块均由自己处理。

解决方案是伪代码,实际代码将不得不处理分割块的行的处理,错误检查等。

"scripts": {
 "start": "ng serve --proxy-config proxy.conf.json"
}

可能可以使用'mmap'使其更快。但是,问题要求进行行处理,并且鉴于这不是实际问题,因此不确定是否值得付出额外的努力。

本文链接:https://www.f2er.com/3043275.html

大家都在问