我使用boost.asio
异步读取数据,如果handle_read
花费大量时间(例如睡眠),是否会影响其他连接?
答案 0 :(得分:2)
使用异步IO,您通常会在一个线程中执行所有操作,因此您应该尽量缩短内容。在处理输入时,肯定不会想睡觉。
Boost有timers让你进行异步睡眠。
答案 1 :(得分:2)
如果在一个线程中执行io_service::run
,则会按顺序调用与该io_service
关联的所有i / o对象的完成处理程序。因此,如果其中一个花费太多时间,则所有队列都会卡住。
为防止出现这种情况,您可以重新设计此完成处理程序,或将有问题处理程序的i / o对象与在单独线程中运行的专用io_service
相关联。
(请注意,在多个线程中运行单个io_serivce
无法解决此问题,因为您无法知道处理程序如何在线程之间分配。)