大型企业项目。我有一个io_service实例:ios _。
我使用协程(boost :: asio :: spawn)
有时(并非总是如此),当我从协程发布函数到boost :: asio :: strand(!!!!)时,该函数未调用。这条链上没有任何东西,也没有stackoverflow错误。
我的问题是:为什么不调用功能?是否存在一些原则性竞争或系统资源方面的问题?
boost::asio::spawn(ios_, [...] (boost::asio::yield_context asio_yield)
{
// BIG asynchronous code
boost::asio::strand strand1(ios_);
strand1.post([](){
// light code.
// sometimes we don't get here
cout << "posted to a strand"
});
});
1)如果我们在发布到链上之前退出协程(例如,通过发布到ios_)-效果很好,我们总是可以使用函数
2)如果我们在boost :: asio :: spawn中使用boost :: asio :: io_service的另一个实例-它也表现得很好
3)启动boost :: asio :: io_service时,thread_pool(12)中有足够的线程
4)使用:1.63提升
我学到的唯一一课:尽快离开协程。但是我们程序的行为是这样的-我没有得到