重写多线程事件驱动的C 程序以使用单线程Boost :: Asio



我正在重构负责IO操作的大型代码库。目前,该程序由许多线程组成,每个线程都等待收到专有事件。事件已发布到全局事件队列,并由所有线程接收(全局事件调度程序调用每个线程的事件处理程序功能,该线程确定它是否应根据事件类型来执行某些操作,并在必要时添加活动队列的活动(。

此架构有很多开销,这两者都是由于有很多线程(在单臂核心上大约有12个线程(,这些线程主要是睡觉的,并且由于工作队列。它还需要几百种不同的事件类,以降低可维护性。

我想用单个螺纹Boost ASIO方法来替换基于事件的体系结构,但不确定我应该使用什么范式来做到这一点。我认为boost :: io_service可能是最好的,但也许是Coroutines,纤维或其他东西会更好。

有人有任何建议,什么boost :: asio范式在离开事件队列时会导致最顺利的过渡?我正在寻找可以提高代码可维护性的东西,而不是使代码完全无法理解以换取开销。

这看起来很有希望,但是Coroutine语法有点令人恐惧,很难将其出售给我的团队:http://www.boost.org/doc/libs/1_57_0/libs/coroutine/doc/html/coroutine/motivation.html

您可以使用boost.fiber-它提供像std :: thread这样的API。您不一定需要boost.asio

最新更新