【发布时间】:2012-02-26 12:45:55
【问题描述】:
我有一个巨大的行分隔文本文件,我想对每一行进行一些计算。我需要制作一个多线程程序来处理它,因为它是每行的处理需要最多的时间才能完成,而不是读取每一行。 (瓶颈在于CPU处理,而不是IO)
我想出了两个选择:
1) 从主线程打开文件,在文件句柄上创建一个锁并将文件句柄传递给工作线程,然后让每个工作线程直接读取文件
2) 创建一个生产者/消费者设置,其中只有主线程可以直接读取文件,并使用共享队列向每个工作线程提供行
须知:
- 我对这项任务的速度表现非常感兴趣
- 每一行都是独立的
- 我在 C++ 中工作,但我想这里的问题有点与语言无关
你会选择哪个选项,为什么?
【问题讨论】:
-
您将使用多少处理器以及文件有多大?
-
文件大约 20GB,在未来的实现中会更大。目前我在 4 核上运行
-
@Alexandros:我知道我回答得太晚了:)。但是为每个线程分配一行行会容易得多吗?您可以使用单个文件指针预先计算每个线程的块大小,然后每个线程打开文件并查找该预先计算的位置。我认为这将是更容易和更快的方法
-
这听起来是个很聪明的人,谢谢!唯一的问题是多个线程读取同一文件中的远程部分可能会产生一些磁盘读取开销,但我认为这不会太多。
标签: java c++ c multithreading producer-consumer