- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
由于 pthread_create 的高开销,我遇到了一个问题。我在互联网上寻找一个好的线程池库,但没有找到适合我的项目的库,或者它们根本不起作用。
我是 C++ 的新手,我的编程技能很基础,但还不错。我编程了很多(超过 5 年),我只是没有做过任何面向对象的项目,甚至没有使用过数据结构。
如果有任何 Material 或指南可以帮助我获得创建自己的线程池所需的经验和知识,我将不胜感激。
由于我当前项目的限制,我将在 Windows 10 (mingw32) 上使用普通的 C++(不是 C++11),并且我必须避免使用任何增强库。
按要求:关于问题:
我正在编写一个计算量大的项目。我想让它运行得更快,所以我决定使用 pthreads。然而,问题在于线程创建是在一个循环内进行的,并且 pthread_create 被调用了 64 次。
经过大量研究和尝试,我发现线程池是这里的解决方案,但我花了 3 天多的时间让我在网上找到的实现工作,但无济于事,所以我决定编写自己的线程池实现.
关于您可以查看的代码示例:How can I reduce the effect of pthread_join. Mingw32, c++
但我意识到是线程创建,而不是 thread_join 导致性能恶化。
最佳答案
尽管那里有一些评论,但基本的线程池并没有那么复杂。它们比好的记录器更简单,例如 :)
首先,有几点声明。
现在,线程池。基本线程池包含 3 个主要部分:传入消息队列、传出消息队列和一组为这些队列提供服务的线程。根据设计,这些消息可能是真正的消息(即字符串“亲爱的线程,请计算 5 + 10”),或者它可以是可调用的东西,线程只是调用。类型删除的函数对象在这里效果最好。因此,当消息是文本时,线程函数将有一堆 if() 语句来处理不同的消息,当它是可调用的时,它会简单地调用这个可调用的。文本消息更易于维护,因为您在文本本身中拥有您需要关心的一切。另一方面,可调用对象具有生命周期,您应该考虑这一点 - 例如,将局部变量作为可调用对象将是一场灾难。
另一部分是消息队列本身。首先,有两个可行的设计选择——每个线程都有自己的队列,或者有一个共享队列供所有线程使用。第一个的好处是队列上没有争用——只有一个读者和一个作者。共享队列存在争用,但好处是它提供了自然的负载平衡 - 线程将在准备好处理新消息时简单地获取消息。
无锁队列通常是用作消息队列的不错选择。
关于c++ - 如何在旧版 C++ 上创建自己的线程池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32610790/
我是一名优秀的程序员,十分优秀!