0

在我的应用程序中,我将收到我想按优先顺序异步处理的各种事件。

我可以用 a 来做到这一点boost::asio::io_service,但我的应用程序是单线程的。我不想为锁付钱,mallocs你可能需要一个多线程程序(性能成本对我来说真的很重要)。我基本上是在寻找一个boost::asio::io_service为单线程执行而编写的。

我很确定我可以自己使用 实现这个boost::coroutine,但在我这样做之前,是否boost::asio::io_service已经存在为单线程执行编写的类似 a 的东西?我已经扫描了 boost 库的列表,但没有什么特别突出的

4

2 回答 2

2

请注意,一旦您使用 Asio 的任何非阻塞调用,您就必须为同步付费

即使您可能使用单个线程来安排工作和处理结果回调,Asio 仍可能需要在内部生成额外的线程来执行异步调用。那些将io_service同时访问。

想想async_read套接字上的一个:一旦接收到的数据可用,套接字就必须通知io_service. 这与您的主线程同时发生,因此需要额外的同步。

对于阻塞 I/O,这个问题在理论上会消失,但由于异步 I/O 是库的重点,我不希望在实现中找到太多针对这种情况的优化。

正如评论中已经指出的那样,只有一个主线程的争用io_service将非常低,因此除非性能分析表明那里存在明显的性能瓶颈,否则您不必担心太多。

于 2014-09-18T09:06:50.540 回答
1

我建议将 boost::asio 与 boost::coroutine -> boost::asio::yield_context 一起使用(coroutine + io_service 之间已经耦合)。如果您检测到具有更高优先级的任务,您可以暂停当前任务并开始处理具有更高优先级的任务。问题是您必须在任务代码中定义/调用某些检查点,以便在给出条件(更高优先级任务入队)时暂停任务。

于 2014-09-18T06:29:52.350 回答