/**
*
* 经典的网络服务在每个线程中完成对数据的处理:
* 但这种模式在用户负载增加时,性能将下降非常的快。
* 系统运行的性能瓶颈通常在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的内容。
*
* 反应器模式
* 用于解决多用户访问并发问题
* 举个例子:餐厅服务问题
* 传统线程池做法:来一个客人(请求)去一个服务员(线程)
* 反应器模式做法:当客人点菜的时候,服务员就可以去招呼其他客人了,等客人点好了菜,直接招呼一声“服务员”
*/
Reactor模式简单实现与理解
最新推荐文章于 2024-05-16 22:19:01 发布