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/…