我一直在尝试处理input.txt
文件的单词,该文件基本上由大文本(可变大小)组成。想法是拆分这个文件并在多个线程中通过块处理它(为了简单起见,我将忽略多线程部分,但最终将是我的目的)。例如,给出这个文本:
The quick brown fox jumps over the lazy dog\n
The quick brown fox jumps over the lazy dog\n
The quick brown fox jumps\n
over the lazy dog
如果我想在6个不同的线程中计算这个文件,我将它分成6个块:
The quick brown fox jumps
(注意最后的空格)
over the lazy dog\n
The quick brown fox jumps
(注意最后的空格)
over the lazy dog\n
The quick brown fox jumps\n
over the lazy dog
为此,我会有类似的内容:
std::ifstream file("input.txt");
file.seekg(0, file.end);
int length = file.tellg();
file.seekg(0, file.beg);
int chunkLength = length/numThreads;
for(i=0; i < numThreads; i++) {
processChunk(i*chunkLength, (i+1)*chunkLength+1);
}
processChunk函数与此类似(为简单起见忽略线程):
void processChunk(int initPos, int endPos) {
std::ifstream file("input.txt");
file.seekg(initPos);
// process it until endPos is reached
file.close()
}
我主要关心的是拆分文件的逻辑,因为我应该确保按字词拆分,所以如果拆分是来自m
的字符example
,我应该减少开始和结束指针以达到\n
或whitespace
(直到e
字符)。
但这意味着许多假设,比如认为input.txt
不会包含一个重叠超过两个块的单词,以及其他一些单词。
我想知道是否有更好的方法可以通过单词分割文件来独立处理块,并尽可能快地处理这种假设。
谢谢!