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,继续向分发器注册.

 

posted @ 2018-05-12 09:29  WorldsCollide  阅读(176)  评论(0)    收藏  举报