我试图理解boost :: asio :: io_service是如何工作的。这就是我的想法 -
boost :: asio :: io_service的实例在内部实现了一个基于事件的队列,这样发布到队列的事件由实现io_service :: run()方法的线程处理。使用它作为普通队列的优点是io_service是异步的,因此不需要浪费CPU周期轮询队列中的事件。
如果以上是正确的,那么如果可用于处理工作(事件)的线程较少以及将工作发布到io_service的速率太高,会发生什么。
在某些时候,当这个队列变满时,帖子会阻塞吗?
我的目的是针对io_service发布一个非阻塞帖子。如果帖子不成功,我想丢弃工作事件。
寻找一些建议。
谢谢!
答案 0 :(得分:0)
队列仅受可用资源的限制。我的假设是它会在资源不足时抛出(例如bad_alloc
),但在此之前事情可能会“停止工作”。
这是因为线程,打开文件,套接字等数量的限制通常较低,即使没有,工作量通常会非常严重,因此您将停止程序(因为它不起作用)。
回顾:如果您在 n 线程上执行所有io_service工作并且其他 m 线程仍可用于在队列上加载任务,那么我预计打破异常的事情。