gpt4 book ai didi

c++ - asio::io_context 和 asio::thread_pool 有什么区别?

转载 作者:行者123 更新时间:2023-12-01 14:22:51 37 4
gpt4 key购买 nike

asio::thread_pool 有什么区别和一个 asio::io_context谁的run()函数是从多个线程调用的?我可以更换我的 boost::thread_group调用 io_context::run() 的线程数与 asio::thread_pool ?或者我需要一个 io_context ?

更新

当我使用 asio::thread_pool ,我还需要io_context吗?使用套接字、定时器等?两者 thread_poolio_contextasio::execution_context .但是,文档在 io_context 上说它“提供核心 I/O 功能”。如果我只使用 asio::thread_pool,我会丢失这些吗?没有 io_context ?

最佳答案

线程池隐式运行所有发布在其上的任务(直到它停止)。

io_service 不对运行它的线程做任何假设:您需要确保这样做,并且您可以自由决定是在多个线程、一个线程还是什至混合(例如一个线程)上运行它有时,但来自多个线程?)。

补充说明:

  • 处理源自 io_service 的异常运行/投票成员 ( Should the exception thrown by boost::asio::io_service::run() be caught? )
  • 如果您在多个线程上运行 io_service,请确保您了解您使用的服务对象的线程安全性(参见 Why do I need strand per connection when using boost::asio?)
  • 如果您知道有多少线程将运行您的服务,请考虑在构造时提供并发提示 ( https://www.boost.org/doc/libs/1_66_0/doc/html/boost_asio/overview/core/concurrency_hint.html )
  • io_service可以重新启动(在 reset() 之后)。 asio::thread_pool没有那么多(参见[搜索是 dead atm],与 asio::io_service and thread_group lifecycle issue 比较)
  • asio::thread_pool 管理的线程是“不透明的”:您无法控制它们的创建方式。如果您需要,那真是太可惜了为每个线程初始化一个第三方库,或者想通过 interruption_point s 使用 Boost Thread等
  • 关于c++ - asio::io_context 和 asio::thread_pool 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61864490/

    37 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com