为什么C++标准库中没有std::thread_pool?

7

对我来说,尽管具有大量的多线程构造,但标准缺乏线程池类似乎很奇怪。为什么委员会不考虑将其添加到标准中呢?


1
除了名称之外,这种类型应该具有什么确切的特征? - StoryTeller - Unslander Monica
1
请看这里:https://dev59.com/UGcs5IYBdhLWcg3wRB3h - Mert Köklü
@StoryTeller-UnslanderMonica 我的想法是创建一个类似于boost::thread_pool的通用线程池。委员会已经将许多boost的线程构造添加到标准中,因此我不明白为什么这样一个重要的东西没有被添加进去。 - Hisham Hijjawi
@user3586940 - 标准的C++在2011年之前根本没有包括线程 - 在这之前,多线程开发依赖于供应商特定的扩展。C++和Java是非常不同的语言,它们发展的方式也非常不同 - 每种语言都有另一种语言所没有的能力。说“但是Java可以做到”并不意味着C++可以(甚至应该)做到它。同样地,说“但是C++可以做到那个”并不意味着Java可以/应该做到。 - Peter
@curiousguy - 我并没有做出这样的建议。 - Peter
显示剩余12条评论
1个回答

1
C++和C一样,旨在尽可能地将控制权交给程序员。C++中几乎所有的内容都是非常基本的包装器。这使得程序员可以自由地实现他们想要的任何功能。
“工作是什么”这个概念有点抽象,取决于使用情况,因此C++提供了工作者(线程),并让您定义如何将工作分配给工作者的策略。
例如,在Python中,您可以将工作映射到线程。使用这种方式,每当有工作可用时,线程将接受工作。但是如果您希望线程仅在有工作要做满足特定条件后才执行工作呢?您可以设计您的thread_pool类以满足所有这些规格。在Python中,您必须在线程池库之外单独处理这些检查。
虽然没有官方答案,但我认为这是更合理的答案。C++是关于在给定最少量的工具下获得控制权(相对于C而言,这是一个扩展集)。委员会最可能不会添加thread_pool类,因为在计算机科学中最难做的事情是让人们达成共识。线程池不一定非常难以实现,而定义工作者的定义则更难。

std::async 在 VS2019 中是作为线程池实现的。它通常比创建新线程要快得多,但与标准不完全兼容,因为静态本地构造/销毁与创建唯一线程不同。 - doug

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接