首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++ Boost多线程比单线程慢是因为CPU的类型?

C++ Boost多线程比单线程慢是因为CPU的类型?
EN

Stack Overflow用户
提问于 2011-05-21 12:47:58
回答 2查看 2K关注 0票数 2

我之前发布过一些boost多线程。这一次我只是好奇和失望,因为我认为多线程应该比单线程更快。

两个线程分别是文件I/O读取/解析CSV数据。当我使用多线程时,从戴尔台式机OPTILEX 745每台机器上运行奔腾D CPU平均需要40秒。

对于单线程,在相同的PC上平均需要8-10秒。

我尝试在这两个线程中使用完全不同的参数名,结果没有什么不同。如果之前有人使用过c++ boost多线程来读取大数据文件和解析,我很想听听你的意见。谢谢。安德鲁

EN

回答 2

Stack Overflow用户

发布于 2011-05-21 13:10:45

的两个线程是文件I/O读取/解析CSV数据。

如果它们正在使用相同的文件句柄读取相同的文件,那么它们可能会花费大部分时间被阻塞,等待另一个线程完成。如果它们使用不同的文件句柄来读取同一文件,则会强制磁盘来回查找,这一操作的效率不如直接顺序读取。

线程化不会加快大文件读取和解析的速度。它所做的是让您在读取和解析文件时做一些完全不同的事情。

您已经创建了一个I/O瓶颈,而线程对此无能为力。当算法可以分解成独立的执行线程时,线程旨在减少CPU瓶颈;对以前的输出有很大依赖性的算法(文件解析是一种情况)通常不能很好地线程化。

如果您可以将解析问题分开,让每个线程解析文件的不同部分,您可能会得到一些改进,但可能不会,因为查找将浪费您的时间。如果您可以让一个线程执行批量读取和一些预处理,然后将数据块传递给一个线程池进行真正的繁重处理(还有吗?),那么您可能会看到比单线程有一些明显的改进。

这一切都是泛泛的,有点意识流,但很难用你所给予的做更多的事情。我希望它能帮上忙。

票数 4
EN

Stack Overflow用户

发布于 2011-05-21 12:56:22

如果没有看到您的代码,就很难确切地说出到底发生了什么,但通常情况下,多线程并不一定能让您获得更好的性能,事实上,多线程经常会导致明显的性能下降。

在您的情况下,如果两个线程都在读取和解析,那么它们可能会争用I/O,并且可能会争用任何共享读/写内存区域周围的锁,这两种情况都会导致速度减慢,而单线程版本不会出现问题。

为了正确地做到这一点,您可能需要一个线程读取文件,另一个线程在数据进入生产者/消费者队列时对其进行解析。这将最大限度地减少锁争用(因为它只能通过等待程序实现),并将确保您实际利用了问题中可用的并行化。

尽管如此,单线程版本仍然可能更快;通常情况下就是这样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6079649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档