我使用boost.asio
异步读取数据,如果handle_read
需要很多时间(例如睡眠),是否会影响其他连接?
问问题
1748 次
2 回答
2
如果您io_service::run
在一个线程中执行,则与之关联的所有 i/o 对象的完成处理程序io_service
将按顺序调用。因此,如果其中一个花费了太多时间,所有队列都会卡住。
为了防止这种情况,您可以重新设计此完成处理程序,或者将具有问题处理程序的 i/o 对象与其io_service
在单独线程中运行的专用运行相关联。
(请注意,在多个线程中运行单个io_serivce
并不能解决这个问题,因为您不知道处理程序是如何在线程之间分布的。)
于 2012-08-29T11:59:35.857 回答
2
使用异步 IO,您通常在一个线程中完成所有操作,因此您应该尽量缩短事情的时间。您绝对不想在处理输入时睡觉。
Boost 有定时器可以让你进行异步睡眠。
于 2012-08-28T15:44:48.030 回答