似乎所有示例总是显示在所有线程中运行相同的io_service.
你能开始多个io_services吗?这是我想做的事情:
在主线程中启动io_service A以处理用户输入...
在另一个线程中启动另一个io_service B,然后可以启动一堆工作线程全部共享io_service B.
io_service A上的用户可以在io_service B上"发布"工作,以便它在工作池上完成,但是在io_service A上没有工作,即主线程.
这可能吗?这有意义吗?
谢谢
我不知道使用strand::wrap 和strand::post 进行发布之间的区别?看起来两者都保证序列化,但如何使用换行序列化而不获得一致的顺序?看起来他们都必须做同样的事情。我什么时候会使用其中一种而不是另一种?
这是更详细的伪代码:
mystrand(ioservice);
mystrand.post(myhandler1);
mystrand.post(myhandler2);
Run Code Online (Sandbox Code Playgroud)
这保证了我的两个处理程序即使在线程池中也能按顺序序列化和执行。
现在,这与下面有什么不同?
ioservice->post(mystrand.wrap(myhandler1));
ioservice->post(mystrand.wrap(myhandler2));
Run Code Online (Sandbox Code Playgroud)
看起来他们做同样的事情?为什么要使用其中一种而不是另一种?我看到两者都被使用,并试图找出什么时候一个比另一个更有意义。