Visual C多线程文件读取

克里斯高特

我正在解析大约8 GB,自然地,我想尽可能地优化内存和处理器使用率。我一次将一个文件读入缓冲区1页(4096字节),它在大约30分钟(比python快几个小时)中读取整个内容,但我想做得更好。我认为多线程是实现这一目标的方法,但我不知道如何在C语言中实现。我所看到的示例令人印象深刻,但过于复杂。我希望有人可以弄清楚使用C的多线程功能的基本组件是什么,并让我对即将遇到的任何并发问题有所了解。感谢您提供任何帮助。

要澄清的是,我正在寻找的是非常基本的东西,例如创建2个线程,每个线程打个四倍打个招呼世界。

想象一下,我有4个线程搜索81920字节(20页)。

线程1:搜索页面1
线程2:搜索页面2
线程3:搜索页面3
线程4:搜索页面4 
---假设它们按顺序完成---
线程1:搜索页面5
线程2:搜索页面6
线程3:搜索第7页
线程4:搜索第8页
---假设它们按顺序完成---
线程1:搜索第9页
线程2:搜索第10页
线程3:搜索第11页
线程4:搜索第12页
---假设它们完成按顺序---
线程1:搜索第13页
线程2:搜索第14页
线程3:搜索第15页
线程4:搜索第16页
---假设它们按顺序完成---
线程1:搜索第17页
线程2:搜索第18页
线程3:搜索第19页
线程4:搜索第20页

之所以如此重要的原因是因为对于81920个字节中的每个字节(实际上,我们希望再增加5个0,我将wcscpy称为5x

我想我已经找到了我想要的东西:这里的第二个例子是关于我想要的复杂程度。我想这样做,谢谢。

詹姆斯·麦克奈利斯

将文件映射到内存。有关如何执行此操作的详细信息,请参见MSDN示例“在文件内创建视图”您的用例有所不同,但是原理是相同的,最终您将使用相同的Windows函数。(如果您使用的是64位进程,则可以将整个文件映射到内存中;否则,您需要将其映射为大块,并处理匹配跨越多个大块的情况。)

您可以CreateThread用来创建多个线程来分块处理数据。

我正在读取一个8 GB的二进制文件,并搜索所有5个特定的文件 wchar_t*

如果这就是您要做的全部工作,那么此工作负载几乎肯定会受到I / O约束,并且多个线程可能会也可能不会帮助您。可以通过对所讨论的数据进行一次遍历来完成这种子字符串搜索,例如,对于单个模式使用Knuth-Morris-Pratt对于多个模式使用Aho-Corasick

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从C ++中的文件中多线程读取?

来自分类Dev

多线程和文件读取

来自分类Dev

多线程读取Julia中的CSV文件

来自分类Dev

用Java读取多线程文件

来自分类Dev

多线程:防止Visual Studio阻止特定线程

来自分类Dev

多线程:防止Visual Studio阻止特定线程

来自分类Dev

多线程访问冲突读取位置C ++

来自分类Dev

多线程访问冲突读取位置C ++

来自分类Dev

使用Visual Studio多线程应用程序进行调试

来自分类Dev

Visual Studio 2012-C#:从资源中读取“ .txt”文件

来自分类Dev

如何使用Visual C ++读取媒体文件的信息?

来自分类Dev

从C#中的DBF(Visual FoxPro)文件读取特定列

来自分类Dev

如何读取/写入INI文件Visual c ++ 6.0(MFC)

来自分类Dev

多线程写入文件时,使用BufferReader读取文件

来自分类Dev

在C中写入文件多线程

来自分类Dev

如何在Visual Studio中将多线程应用程序调试为单线程

来自分类Dev

用C ++线程读取文件

来自分类Dev

多线程,用于在C ++中读取和写入SERVER

来自分类Dev

如何在多线程 C++ 程序中读取锁

来自分类Dev

多线程文件搜索

来自分类Dev

认真杀死Visual C ++串行线程

来自分类Dev

编辑文件处理Visual C ++

来自分类Dev

从多个文件读取并使用多线程将它们写入文件文件序列

来自分类Dev

Visual Studio C ++错误读取位置

来自分类Dev

C#。多线程

来自分类Dev

C ++多线程错误

来自分类Dev

在文件中读取Visual C#有多少种不同的方式?

来自分类Dev

为什么我不能使用Visual Studio在C语言中读取文本文件?

来自分类Dev

(Visual C#)如何将TXT文件读取到组合框