使用Boost Asio设置发布队列大小的限制?

Jon*_*art 9 c++ boost-asio threadpool

boost::asio::io_service用作基本线程池.一些线程被添加到io_service,主线程开始发布处理程序,工作线程开始运行处理程序,一切都完成.到现在为止还挺好; 我获得了比单线程代码更好的加速.

但是,主线程有数以百万计的东西要发布.它只是继续发布它们,比工作线程可以处理它们快得多.我没有达到内存限制,但是将这么多内容排入队列仍然有些愚蠢.我想要做的是处理程序队列具有固定大小,并且如果队列已满,则使用post()块.

我在Boost ASIO文档中没有看到任何选项.这可能吗?

gda*_*004 0

您可以使用strand对象来放置事件并在您的main中放置延迟?在所有工作发布后,您的程序是否会退出?如果是这样,您可以使用工作对象,这将使您能够更好地控制 io_service 何时停止。

您始终可以主要检查线程的状态并让它等待,直到一个线程空闲或类似的情况。

//链接

http://www.boost.org/doc/libs/1_40_0/doc/html/boost_asio/reference/io_service__strand.html

http://www.boost.org/doc/libs/1_40_0/doc/html/boost_asio/reference/io_service.html

//example from the second link
boost::asio::io_service io_service;
boost::asio::io_service::work work(io_service);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。