boost::asio::io_context停止执行新任务的问题排查求助
boost::asio::io_context停止执行新任务的问题排查求助
各位大佬好,我最近碰到一个Boost.Asio相关的棘手问题,折腾好几天了还没头绪,想请教下大家有没有什么思路或者排查方向。
我的程序架构是这样的:用了单个io_context实例,配合多个工作线程,每个线程都会调用io_context::run()来处理任务。任务是通过spawn或者post提交到全局io_context或者它派生的strand上,正常情况下工作线程都会正常处理这些任务。
但程序连续跑个几天之后,偶尔会出现完全停止接收新任务的异常情况:此时所有工作线程看起来都是空闲状态,卡在等待新任务的环节,但新提交的任务既不被执行,甚至感觉像是根本没被io_context接收。
当时捕获到的工作线程调用栈如下:
+ 7794 thread_start (in libsystem_pthread.dylib) + 8 [0xptr] + 7794 _pthread_start (in libsystem_pthread.dylib) + 136 [0xptr] + 7794 boost::(anonymous namespace)::thread_proxy(void*) (in myprog1.dsym) + 188 + 3450312 [0xptr] + 7794 boost::detail::thread_data<Service::ServiceImpl::Run(std::__1::function<void ()> const&)::$_1>::run() (in myprog1.dsym) + 176 + 10518812 [0xptr] + 7794 boost::asio::io_context::run() (in myprog1.dsym) + 32 + 10147768 [0xptr] + 7794 boost::asio::detail::scheduler::run(boost::system::error_code&) (in myprog1.dsym) + 264 + 7744452 [0xptr] + 7794 boost::asio::detail::scheduler::do_run_one(boost::asio::detail::conditionally_enabled_mutex::scoped_lock&, boost::asio::detail::scheduler_thread_info&, boost::system::error_code const&) (in myprog1.dsym) + 304 + 7745104 [0xptr] + 7794 _pthread_cond_wait (in libsystem_pthread.dylib) + 984 [0xptr] + 7794 __psynch_cvwait (in libsystem_kernel.dylib) + 8 [0xptr]
需要说明的是,出现这个问题的时候,我的代码还是一直在正常往io_context提交任务的,但就是没任何反应。
想请大家帮忙分析下可能的原因,或者给一些调试的具体建议——比如有没有办法在出现这种异常场景的时候,去查看或者导出io_context的内部状态?
内容来源于stack exchange
相关产品推荐
相关产品推荐

