关于boost.asio异步睡眠

about boost.asio async sleep

本文关键字:异步 asio boost 关于      更新时间:2023-10-16

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

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

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

(请注意,在多个线程中运行单个io_serivce并不能解决这个问题,因为您不知道处理程序是如何在线程之间分布的。)

使用异步IO,通常在一个线程中完成所有工作,因此应尽量缩短时间。您在处理输入时肯定不想睡觉。

Boost有定时器,可以让你进行异步睡眠。