提升asio io_service - 如果队列已满,会发生什么

时间:2015-02-04 13:01:32

标签: boost-asio

我试图理解boost :: asio :: io_service是如何工作的。这就是我的想法 -

boost :: asio :: io_service的实例在内部实现了一个基于事件的队列,这样发布到队列的事件由实现io_service :: run()方法的线程处理。使用它作为普通队列的优点是io_service是异步的,因此不需要浪费CPU周期轮询队列中的事件。

如果以上是正确的,那么如果可用于处理工作(事件)的线程较少以及将工作发布到io_service的速率太高,会发生什么。

在某些时候,当这个队列变满时,帖子会阻塞吗?

我的目的是针对io_service发布一个非阻塞帖子。如果帖子不成功,我想丢弃工作事件。

寻找一些建议。

谢谢!

1 个答案:

答案 0 :(得分:0)

队列仅受可用资源的限制。我的假设是它会在资源不足时抛出(例如bad_alloc),但在此之前事情可能会“停止工作”。

这是因为线程,打开文件,套接字等数量的限制通常较低,即使没有,工作量通常会非常严重,因此您将停止程序(因为它不起作用)。

回顾:如果您在 n 线程上执行所有io_service工作并且其他 m 线程仍可用于在队列上加载任务,那么我预计打破异常的事情。