- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我之前发布过一些boost多线程。这次我只是好奇和失望,因为我认为多线程应该比单线程快。
两个线程是FILE I/O读取/解析CSV数据。当我使用多线程时,每台来自 DELL DESKTOP OPTILEX 745 的 PENTIUM D CPU 平均需要大约 40 秒。
对于单线程,同一台 PC 平均需要大约 8-10 秒。
我曾尝试使用来自这两个线程的完全不同的参数名称,结果没有什么不同。如果有人以前使用过 c++ boost 多线程读取大数据文件和解析,我很想听听你的意见。谢谢。安德鲁
最佳答案
Two threads are FILE I/O read/parse the CSV data.
如果他们正在读取具有相同文件句柄的同一个文件,那么他们可能会花费大部分时间等待另一个线程完成。如果他们使用不同的文件句柄来读取同一个文件,他们就会迫使磁盘不断来回查找,这不如直接顺序读取那样高效。
线程不会 boost 大文件的读取和解析。它的作用是让您在读取和解析文件时完全做其他事情。
您已经造成了 I/O 瓶颈,线程对此无济于事。当算法可以分解为独立的执行线程时,线程化旨在减少 CPU 瓶颈;对先前输出有很大依赖性的算法(文件解析是一种情况)通常不能很好地线程化。
如果您可以拆分解析问题并让每个线程解析文件的不同部分,您可能会得到一点改进,但可能不会,因为查找会浪费您的时间。如果您可以让一个线程执行批量读取和一些预处理,然后将 block 移交给线程池以进行真正的繁重处理(有吗?),那么您可能会看到比单线程有一些明显的改进。
这都是一般性的,有点意识流,但是很难用你所提供的东西做更多的事情。希望对您有所帮助。
关于由于 CPU 类型,C++ Boost 多线程比单线程慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6079649/
此代码似乎在启用优化的广泛使用的编译器上中断,尽管它在 Visual Studio 中运行良好。 struct foo { foo(int a) { s[0] = '0'+a%10;s[1]
我想要一个图表,其中有一个单线箭头,如下所示: 1 2 3 4 5 或者像这样(其中/假设是一个箭头:)): \/ -----------------
我正在为 Java 编写自定义规则。有两个 Tree.KIND 实例(STRING_LITERAL 和 ASSIGNMENT)需要捕获。有一个特定的行,字符串文字和赋值的逻辑都会引发问题。但 Sona
Rosettacode.org 在 Ruby 中有这个出色的单行 FizzBuzz 解决方案。 1.upto(100){|n|puts'FizzBuzz '[i=n**4%-15,i+13]||n
很多时候我使用了这个命令,它在当前目录打开了一个临时的 HTTP 服务器: python3 -m http.server 现在我需要接收文件,有没有打开ftp服务器的一行命令? 我只是在寻找一个命令行
相关主题 std::unique_ptr, deleters and the Win32 API 要将 Win32 句柄用作 RAII,我可以使用以下行 std::unique_ptr::type,
我认为必须有一个单行 Guava 解决方案来将一个不可变列表转换为另一个不可变列表,但我找不到它。假设我们有以下对象: ImmutableList input = ImmutableList.of("
我有以下 Highcharts ( http://www.highcharts.com ) 散点图。请注意,轴从 -10 开始,到 10 停止,中间为 0。我希望每条 0 线的宽度或颜色都与其他线不同
我有一个项目需要将一个视频文件与另一个音频文件合并。预期的输出是一个视频文件,其中包含来自实际视频的音频和合并后的音频文件。输出视频文件的长度将与实际视频文件的大小相同。 是否有单行 FFMPEG 命
我在 python3 类中有 2 个列表: self.keys = ["a","b","c","d"] self.values = [1,2,3,4] len(self.keys) == len(se
我有一个不同长度的数组列表,我想将它们组合成一个最大维度的矩阵,并在末尾填充零。例如(伪代码): combine( [1,2,3], [4,5]) [[1,2,3],[4,5,0]] 这是我目前的解决
例如,给定 i=5 和 n=8,我想生成 [0;0;0;0;1;0; 0;0]。具体来说,我想生成向量 v 以便: v = zeros(n,1); v(i) = 1; 有没有一种(合理的)方法可以在一
我是一名优秀的程序员,十分优秀!