【问题标题】:Is there a thread pool implementation in boost?boost中是否有线程池实现?
【发布时间】:2017-08-17 02:43:36
【问题描述】:

This question 指的是boost::threadpool::pool,有关于它的文档here on sourceforge,但我在boost docs 中找不到它。

不加boost的为什么叫boost?

PS:我知道如何使用 Boost::ASIO 的io_service 来创建线程池,但我想了解这个boost::threadpool 是什么。

【问题讨论】:

  • 这是一个非常古老的图书馆。似乎它不是正式的boost 的一部分。现在线程池是boost::asio 的一部分。
  • @Zefick io_service 不会产生任何线程,是吗?所以,不能叫它线程池。
  • 没有boost::threadpool::pool。但是你可以在源代码和示例中找到boost::executors::basic_thread_pool 和 `boost::executors::scheduled_thread_pool'。但不在文档中。最后的更改是在 boost 1.60 中进行的,因此似乎没有被放弃。也许它是实验性的?
  • 好的。我怎么不知道这些@MichaelNastenko。此外,看到执行器在我们说话时正在标准化,我不愿意得出结论他们没有被放弃,因为“最后一次更改是在 boost 1.60 中”。从任何实际措施来看,这都太老了。我认为更好的版本应该在 Chris Kohlhoffs github github.com/chriskohlhoff/executors

标签: c++ multithreading boost threadpool


【解决方案1】:

作为 Boost.Thread 维护的前帮手,我经常被问到为什么 Boost.Thread 不提供线程池。简单的答案是你自己滚动真的太容易了,例如here is a perfectly fine threadpool implementation in only a few lines of C++。

这对 Boost 来说太小了,在尝试提交通用线程池时会发生太多的自行车脱落。因此,您可以滥用 ASIO 来实现线程池(也很容易)、自行开发,或者只使用可通过 std::async 访问的 C++ 11 标准库中的线程池。

【讨论】:

  • 将它放在 Boost 中的原因是 Boost 是人们一次又一次地寻找它的地方(包括我自己)。你说只需要几行代码(那个老谣言)就可以自己推出,但那么肯定 Boost.Bimap 不应该存在吗?最后,根据我的浏览器,您提供的链接不包含“池”一词。因此,凡人永远不会把它弄明白。
  • 要在 Boost 中通过同行评审,要求它足够无争议。 “完美”的线程池会引起极大的争议。我怀疑它是否会通过,至少直到 Executors WG21 提案消除了很大一部分潜在的自行车脱落。所以你最终可能会如愿以偿,但还需要几年时间。
  • 示例链接已失效。
  • 每当我在线程基础架构的上下文中听到“简单”时,我都会感到恶心。并发用户和并发实施者是具有不同专业知识的两组不同的人。我强烈不同意它对 Boost 来说“太小”。但你说得对:让 AP​​I 适合通用线程池是很困难的。
  • 这只是在乞求问题——如果它这么简单,人们就会自己动手,而不是寻求提升来提供一个。人们不断要求它应该向您暗示,也许它并不那么容易。如果我们担心的是自行车脱落,那为什么还存在boost呢?它怎么可能是“太小了”但又如此有争议,以至于无情的自行车脱落是不提供它的理由?
猜你喜欢
  • 2017-04-09
  • 1970-01-01
  • 2011-09-11
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多