我有一个巨大的行分隔文本文件,我想对每一行进行一些计算。我需要制作一个多线程程序来处理它,因为它是每一行的处理花费最多的时间来完成而不是读取每一行。 (瓶颈在CPU处理,而不是IO)
我想到了两个选项:
1) 从主线程打开文件,在文件句柄上创建一个锁并将文件句柄传递给工作线程,然后让每个工作线程直接读取访问文件
2) 创建一个生产者/消费者设置,其中只有主线程可以直接读取文件,并使用共享队列向每个工作线程提供行
要知道的事情:
- 我对这项任务的速度性能非常感兴趣
- 每一行都是独立的
- 我在 C++ 中工作,但我想这里的问题有点与语言无关
您会选择哪个选项,为什么?
最佳答案
我会建议第二种选择,因为与第一种选择相比,它的设计更清晰,也更简单。第一个选项的可扩展性较低,需要线程之间进行额外的通信才能同步它们在文件行上的进度。而在第二个选项中,您有一个处理 IO 并启动工作线程以开始计算的调度程序,并且每个计算线程彼此完全独立,因此允许您扩展。此外,在第二个选项中,您可以更清晰地分离逻辑。
关于java - 多线程访问同一个文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9453186/