Reactor模式简单实现与理解

/** 
 * 
 * 经典的网络服务在每个线程中完成对数据的处理:
 * 但这种模式在用户负载增加时,性能将下降非常的快。
 * 系统运行的性能瓶颈通常在I/O读写,包括对端口和文件的操作上,过去,在打 开一个I/O通道后,
 * read()将一直等待在端口一边读取字节内容,如果没有内容进来,read()也是傻傻的等,
 * 这会影响我们程序继续做其他事情,那 么改进做法就是开设线程,让线程去等待,但是这样做也是相当耗费资源(传统socket通讯服务器设计模式) 的。
 * 
 * Java NIO非堵塞技术实际是采取Reactor模式,或者说是Observer模式为我们监察I/O端口,
 * 如果有内容进来,会自动通知我们,这样,我们就不必开启多个线程死等,从外界看,实现了流畅的I/O读写,不堵塞了。 
 * NIO 有一个主要的类Selector,这个类似一个观察者 ,只要我们把需要探知的 socketchannel告诉Selector,
 * 我们接着做别的事情,当有事件发生时,他会通知我们,传回一组SelectionKey,我们读取这些 Key,就会获得我们刚刚注册过的socketchannel,
 * 然后,我们从这个Channel中读取数据,放心,包准能够读到,接着我们可以处理这些数据。 
 * Selector内部原理实际是在做一个对所注册的channel的轮询访问 ,不断的轮询(目前就这一个算法),一旦轮询到一个channel有所注册的事情发生,
 * 比如数据来了,他就会站起来报告,交出一把钥匙,
 * 让我们通过这把钥匙(SelectionKey 表示 SelectableChannel 在 Selector 中的注册的标记。 )来读取这个channel的内容。 
 * 
 * 反应器模式 
 * 用于解决多用户访问并发问题 
 * 举个例子:餐厅服务问题 
 * 传统线程池做法:来一个客人(请求)去一个服务员(线程) 
 * 反应器模式做法:当客人点菜的时候,服务员就可以去招呼其他客人了,等客人点好了菜,直接招呼一声“服务员” 
 */ 

猜你喜欢

转载自blog.csdn.net/luzhensmart/article/details/82260721