我对Windows客户端使用Boost :: ASIO版本1.52.0。我希望能够专门用一个线程来处理来自服务器的所有接收消息,然后再使用另一个专用线程来处理到服务器的所有传出消息。我现在对两个线程都使用相同的io_service
对象。我担心的是,当调用io_service::run()
方法时,处理传出消息的线程可能会计划处理某些传入的消息调用,反之亦然。所以,我的问题 - 这可能吗?如果是这样,那么将使用第二个io_service
对象解决问题 - 每个线程一个?有没有更好的方法来设计这个?我试图避免为读取和写入处理程序使用多个线程。Boost :: ASIO - 如何专用2个线程来处理接收和发送消息
我想确认的另一件事是 - 我已经读过,如果可以同时完成2个或多个async_reads
,应该使用锁来单线程代码。同样适用于async_writes
。如果an async
_read可以与async_write
同时执行,或者应该是线程安全的,那么还应该使用锁吗?
最后一个问题 - 可以在异步方法 - async_connect
,async_read
和async_write
全部由工作线程之前不同的线程调用已调用io_service
run方法?
感谢您澄清每个套接字只使用一个io_service对象。我写的客户可能需要最终使用优先处理程序。我已经找到了这个例子。我只是希望我可以避免必须实施,因为它似乎有点牵扯。我希望通过将线程专用于传入消息,并将另一个线程用于传出消息,我可以保持传出消息的处理非常灵敏。猜猜我会用2个线程尝试它,实现链或锁定,并希望最好。 –