重写多线程事件驱动的C ++程序以使用单线程boost :: asio

时间:2018-03-28 23:38:23

标签: c++ boost boost-asio

我正在努力重构一个负责IO操作的大型代码库。目前,该程序由许多线程组成,每个线程等待接收专有事件。事件被发布到全局事件队列并被所有线程接收(全局事件调度程序为每个线程调用事件处理函数,并且该线程根据事件类型确定它是否应该执行某些操作,并且如果需要,添加该事件事件到自己的工作队列。)

这种体系结构有很多开销,这是由于有很多线程(单臂核心上大约12个),这些线程主要是睡眠并且由于工作队列。它还需要几百个不同的事件类,这会降低可维护性。

我想用单线程boost asio方法替换这个基于事件的架构,但我不确定应该使用什么范例来做到这一点。我认为boost :: io_service可能是最好的,但也许协程,光纤或其他东西会更好。

有没有人有什么建议当远离事件队列时,boost :: asio范例会导致最平滑的过渡?我正在寻找能够提高代码可维护性的东西,而不是让代码完全无法理解以换取减少的开销。

这看起来很有希望,但协程语法有点可怕,而且很难卖给我的团队其他成员: http://www.boost.org/doc/libs/1_57_0/libs/coroutine/doc/html/coroutine/motivation.html

1 个答案:

答案 0 :(得分:0)

您可以使用boost.fiber - 它提供了一个类似std :: thread的API。 你不一定需要boost.asio