【发布时间】:2015-12-13 04:03:57
【问题描述】:
由于 pthread_create 的高开销,我面临一个问题。我已经在互联网上寻找一个好的线程池库,但我没有找到适合我的项目的,或者它们根本不起作用。
我对 c++ 很陌生,我的编程技能很基础,但是很好。我编程了很多(超过 5 年),我只是没有做任何面向对象的项目,甚至没有使用过数据结构。
我非常感谢任何可以帮助我获得创建自己的线程池所需的经验和知识的材料或指南。
由于我当前项目的限制,我将在 Windows 10 (mingw32) 上使用普通的 c++(不是 C++11),并且必须避免使用任何 boost 库。
根据要求:关于问题:
我正在编写一个计算成本高的项目。我想让它运行得更快,所以我决定使用 pthreads。然而,问题在于线程创建是在一个循环内,并且 pthread_create 被调用了 64 次。
经过大量研究和尝试,我发现线程池是这里的解决方案,但我花了 3 天多的时间让我在网上找到的实现工作,但无济于事,所以我决定编写自己的线程池实现.
关于您可以检查的代码示例:How can I reduce the effect of pthread_join. Mingw32, c++
但我意识到是线程创建,而不是导致性能恶化的 thread_join。
【问题讨论】:
-
您能更具体地说明您遇到的问题吗?就像游泳池本身一样?工作队列?线程?把它们放在一起?
-
如果您对 Boost 没问题,那么使用 Boost.Asio 进行基于任务的多线程处理是一种非常有效(和跨平台)的方法:stackoverflow.com/questions/19500404/…
-
我希望这个编辑能更好地澄清问题。我会尝试 boost 解决方案,但我的项目规模有限,所以我不能包含大型库。
-
对于计算昂贵的项目,我建议不要发明轮子,也不要试图搞乱低级多线程,而是使用基于任务的多线程,它实际上在其实现中使用线程池。最好的实现之一是英特尔线程构建块:threadingbuildingblocks.org
-
我查看了 threadingbuildingblocks.org,它有 42 MB,非常大。
标签: c++ multithreading pthreads mingw threadpool