gpt4 book ai didi

由于 CPU 类型,C++ Boost 多线程比单线程慢?

转载 作者:搜寻专家 更新时间:2023-10-31 00:45:48 25 4
gpt4 key购买 nike

我之前发布过一些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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com