我有一台四核机器,想编写一些代码来解析一个文本文件,以利用所有四核。文本文件基本上每行包含一条记录。
多线程不是我的强项,所以我想知道是否有人可以给我一些模式,我可以使用这些模式以最佳方式解析文件。
我的第一个想法是将所有行读入某种队列,然后启动线程以将行从队列中拉出并处理它们,但这意味着队列必须存在于内存中,而且这些文件相当大所以我不太热衷于这个想法。
我的下一个想法是拥有某种 Controller ,它将读取一行并为其分配一个线程来解析,但我不确定如果线程处理行的速度更快, Controller 是否最终会成为瓶颈比它可以读取和分配它们。
我知道可能还有比这两种更简单的解决方案,但目前我还没有看到。
最佳答案
我同意你最初的想法。如果您担心队列可能变得太大,请为其实现缓冲区(即,如果超过 100 行,则停止读取文件,如果低于 20 行,则重新开始读取。您需要进行一些测试找到最佳障碍)。使任何线程都可能成为“读取线程”,因为它必须锁定队列以无论如何拉出一个项目,它还可以检查是否已命中“低缓冲区”并重新开始读取。在执行此操作时,其他线程可以读出队列的其余部分。
或者,如果您愿意,可以让一个读取器线程将这些行分配给其他三个处理器 线程(通过它们自己的队列)并实现 work-stealing strategy .我从来没有这样做过,所以我不知道这有多难。
关于c# - 多核文本文件解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7015/