java - 多线程访问同一个文本文件

标签 java c++ c multithreading producer-consumer

我有一个巨大的行分隔文本文件,我想对每一行进行一些计算。我需要制作一个多线程程序来处理它,因为它是每一行的处理花费最多的时间来完成而不是读取每一行。 (瓶颈在CPU处理,而不是IO)

我想到了两个选项:

1) 从主线程打开文件,在文件句柄上创建一个锁并将文件句柄传递给工作线程,然后让每个工作线程直接读取访问文件

2) 创建一个生产者/消费者设置,其中只有主线程可以直接读取文件,并使用共享队列向每个工作线程提供行

要知道的事情:

  • 我对这项任务的速度性能非常感兴趣
  • 每一行都是独立的
  • 我在 C++ 中工作,但我想这里的问题有点与语言无关

您会选择哪个选项,为什么?

最佳答案

我会建议第二种选择,因为与第一种选择相比,它的设计更清晰,也更简单。第一个选项的可扩展性较低,需要线程之间进行额外的通信才能同步它们在文件行上的进度。而在第二个选项中,您有一个处理 IO 并启动工作线程以开始计算的调度程序,并且每个计算线程彼此完全独立,因此允许您扩展。此外,在第二个选项中,您可以更清晰地分离逻辑。

关于java - 多线程访问同一个文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9453186/

相关文章:

java - 让应用程序在 Android 上始终在后台运行

java - InputStream in.read() 的行为与预期不同

java - 有没有办法将日期格式的偏移参数与冒号一起使用?

c - 如何在函数中分配双指针的内存?

java - 第一次项目构建后,Eclipse 编辑器在 Ubuntu 16.04 上运行缓慢

c# - 从 C++ 使用 COM Interop 对象

c++ - python/c++ - 使用 cmake 编译共享库并使用 distutils 安装

c++ - 在 C++ 中打开和保存图形文件

C - 二维数组向外(从中心开始)顺时针螺旋遍历

c - avr-gcc 编译?有人能帮我吗