io进化史和netty

162 阅读2分钟

io的进化轨迹

常常说的阻塞和同步是什么

同步:与之对应的是异步。描述的是用户线程和内核线程是否是并行的。 阻塞:与之对应的是非阻塞,这个是从用户线程的角度看待问题,是否需要wait()操作

同步阻塞io

同步非阻塞io

IO多路复用

依赖于内核提供的多路分离函数,只是将同步非阻塞中的轮训操作 交给了系统内核来做。


使用IO多路复用,确实减少了用户态和内核态的切换,但是对于网络tcp连接,又当如何优化呢? 一个tcp连接简单分为,建立连接,拷贝数据,断开连接。

异步IO(NIO)

这里需要有一个图能 从 建立连接,拷贝数据,断开连接几个方面叙述

##遵从的设计模式 Reactor模式 符合的设计原则:好莱坞原则,don't call me,i will call you.

Reactor逆置了事件处理流程,应用程序需要提供相应的接口并注册到Reactor上,如果相应的事件发生,Reactor将主动调用应用程序注册的接口

组成部分

(1)事件源

(2)Reactor框架

(3)多路复用机制

(4)事件处理程序

案例一: 长途客车在路途上,有人上车有人下车,但是乘客总是希望能够在客车上得到休息。

汽车是乘客访问的主体(Reactor),乘客上车后,到售票员(acceptor)处登记,之后乘客便可以休息睡觉去了,当到达乘客所要到达的目的地后,售票员将其唤醒即可。 问题:谁能告诉我 对应的组成部分是哪些?

netty如何实现

重要组件:

  • Bootstrap or ServerBootstrap:ServerBootstrap绑定到指定端口来监听客户端连接请求,Bootstrap连接至远程服务端。
  • Channel:就是reactor模式的事件源。
  • EventLoopGroup:EventLoop的组合,不断的轮训 channel
  • ChannelPipeline:由ChannelHandler组成。用来流水线的加工数据。
  • Future or ChannelFuture:当对应通道的注册事件发生了之后,做对应的回调处理。

##对我们的coding影响 我来个抛转引玉,我们是否可以对 系统中的 比较耗时且峰值调用量比较大的方法,是否可以采用这种回调的future的方式来解决。

参考网页:blog.csdn.net/tanga842428… www.cnblogs.com/hapjin/p/57… blog.csdn.net/skiof007/ar… blog.csdn.net/hello_bravo… www.cnblogs.com/TomSnail/p/…