reactor
参考此文章: https://www.cnblogs.com/dirt2/p/5590320.html
一:非阻塞i/o比阻塞i/o的优点
阻塞i/o的问题:如果每个线程对应一个连接,即:从建立连接,准备数据,读取数据,编码,解码以及来回发送数据,都在一个线程里全包了,这种很可能出现所有线程都在等待数据的现象,
而非阻塞i/o+i/o复用,他只阻塞在i/o复用上即只有一个线程卡死.岂不美哉. 这样也就不需要前面那么多的线程,也减少了线程间切换的开销。貌似只需要一个线程,记得muduo库的reactor是单线程.
引用: 单线程服务器的常见编程模型 : 在高性能的网络程序中,使用得最为广泛的是non-blocking IO + IO multiplexing模型,即reactor模式.
多线程服务器的常用编程模型:one loop per thread:程序里的每个IO线程有一个event loop(reactor),用于处理读写和定时事件. 线程池:用于计算,可配合任务队列使用
即:线程池+eventloop
二:reactor模式
说白了就是i/o复用+非阻塞i/o。
有这么几种角色:分发器,event handler,Event Demultiplexer.
1:注册EventHandler到InitiationDispatcher中
2:启动Event Loop,调用i/o复用,开始接受连接。
3:i/o复用返回,根据连接的type去找对应的event handle
4:如果event handle是accept的话又会返回新的fd,继续向分发器注册.

浙公网安备 33010602011771号