reactor模式和netty的理解,参考网上

参考文章来源:

https://www.cnblogs.com/crazymakercircle/p/9833847.html

经典网络数据处理模式,客户端

经典网络接收模式,无并发,阻塞:

  1. while循环,
  2. 监听端口是否有套接字连接,accept()
  3. 如果有,那么就调用一个处理函数处理,handle()

多线程实现并发,每个线程进行上述过程。

经典模式归纳:

客户端的一个 socket 对应服务端的一个线程,多个客户端或者多个 Socket 对应服务端多个线程。这样服务器端会存在大量的线程来处理。

  1. 线程的创建是消耗资源的,服务端能够创建的资源有限。(对每个线程的资源分配)
  2. 线程的上下文切换在这种模式下也会造成很大的性能消耗,特别是线程数量比较多的情况。(来回的切换过程中的加载、释放)
  3. Socket 使用来传递数据的,但是 Socket 的可能不传数据而且没有断开,这样线程还需要存活,造成线程资源的浪费。

解决思路:

事件驱动,当有事件触发时,才会调用处理器进行数据处理,单一线程能处理大量数据;

reactor模式

  1. 同步的等待多个事件源到达(采用select()实现:网络编程中,将服务器和客户端放入一个数组,select遍历所有文件描述符,成功则可以下一步执行)

  2. 将事件多路分解以及分配相应的事件服务进行处理,这个分派采用server集中处理(dispatch)

  3. 分解的事件以及对应的事件服务应用从分派服务中分离出去(handler)

nio原理

NIO主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selector(选择器);

数据从channel到缓冲区,而非字节流传输;

selector基于事件驱动,监控多个channel()

reactor模式

和普通函数调用的不同之处在于:应用程序不是主动的调用某个API完成处理,而是恰恰相反,Reactor逆置了事件处理流程,应用程序需要提供相应的接口并注册到Reactor上,如果相应的时间发生,Reactor将主动调用应用程序注册的接口,这些接口又称为“回调函数”。

  • IO是面向流的处理,NIO是面向块(缓冲区)的处理
  • 面向流的I/O 系统一次一个字节地处理数据

待续....

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值