30天自制C++服务器day12-将服务器改写为主从Reactor多线程模式
在上一天的教程,我们实现了一种最容易想到的多线程Reactor模式,即将每一个Channel的任务分配给一个线程执行。这种模式有很多缺点,逻辑上也有不合理的地方。比如当前版本线程池对象被EventLoop所持有,这显然是不合理的,线程池显然应该由服务器类来管理,不应该和事件驱动产生任何关系。如果强行将线程池放进Server类中,由于Channel类只有EventLoop对象成员,使用线程池则需要注册回调函数,十分麻烦。
更多比较可以参考陈硕《Linux多线程服务器编程》第三章
今天我们将采用主从Reactor多线程模式,也是大多数高性能服务器采用的模式,即陈硕《Linux多线程服务器编程》书中的one loop per thread模式。
此模式的特点为:
服务器一般只有一个main Reactor,有很多个sub Reactor。服务器管理一个线程池,每一个sub Reactor由一个线程来负
共有 0 条评论