我有一个四核机器,并希望编写一些代码来解析利用所有四个核心的文本文件.文本文件基本上每行包含一条记录.
多线程不是我的强项,所以我想知道是否有人能给我一些我可以用来以最佳方式解析文件的模式.
我的第一个想法是将所有行读入某种队列,然后旋转线程将线从队列中拉出并处理它们,但这意味着队列必须存在于内存中,这些是相当大的文件所以我'我不是那么热衷于这个想法.
我的下一个想法是让某种控制器在一行中读取并为其分配一个线程进行解析,但是我不确定如果线程处理线路的速度超过它可能会导致控制器最终成为瓶颈阅读并分配它们.
我知道这可能是另一个比这两个更简单的解决方案,但目前我还没有看到它.
Mark的答案是更简单,更优雅的解决方案.如果没有必要,为什么要使用线程间通信来构建复杂的程序?产生4个线程.每个线程计算文件大小/ 4以确定它的起点(和停止点).然后,每个线程可以完全独立工作.
添加特殊线程来处理读取的唯一原因是,如果您希望某些行需要花费很长时间来处理,并且您希望这些行聚集在文件的单个部分中.当您不需要它时添加线程间通信是一个非常糟糕的主意.您极大地增加了引入意外瓶颈和/或同步错误的可能性.