1

我使用boost.asio异步读取数据,如果handle_read需要很多时间(例如睡眠),是否会影响其他连接?

4

2 回答 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 回答