关于boost.asio异步睡眠

时间:2012-08-28 10:24:35

标签: c++ boost-asio

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

2 个答案:

答案 0 :(得分:2)

使用异步IO,您通常会在一个线程中执行所有操作,因此您应该尽量缩短内容。在处理输入时,肯定不会想睡觉。

Boost有timers让你进行异步睡眠。

答案 1 :(得分:2)

如果在一个线程中执行io_service::run,则会按顺序调用与该io_service关联的所有i / o对象的完成处理程序。因此,如果其中一个花费太多时间,则所有队列都会卡住。

为防止出现这种情况,您可以重新设计此完成处理程序,或将有问题处理程序的i / o对象与在单独线程中运行的专用io_service相关联。

(请注意,在多个线程中运行单个io_serivce无法解决此问题,因为您无法知道处理程序如何在线程之间分配。)