netty权威指南之笔记

1、Java的I/O演进之路
FD:
UNIX提供了5种I/O模型:
1、阻塞I/O模型: 进程阻塞与recvfrom的调用
2、非阻塞I/O模型:进程反复调用recvfrom等待返回成功指示(轮询)
3、I/O复用模型:Linux提供select/poll,阻塞在select,等待可能多个套接口中的任一个变为可读,这样select/poll帮我们侦测多个fd是否处于就绪状态。epoll基于事件驱动方式,当有fd就绪时,立即回调函数rollback。
4、信号驱动I/O模型:生成SIGIO信号,通过信号回调通知应用程序调用recvform来读取数据。
5、异步I/O:告知内核启动某个操作,并让内核在整个操作完成后通知我们。

2、I/O多路复用技术
通过把多个I/O的阻塞复用到同一个select的阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端请求。优势:系统开销小,系统不需要创建新的额外进程或者线程。
select:做轮询和网络事件通知。单个进程打开FD限制为1024
pselect
poll
epoll:所支持的FD上限是操作系统的最大文件句柄数
       cat /proc/sys/fs/file-max

16:36 [[email protected]]$ cat /proc/sys/fs/file-max
131072


NIO编程
NIO:new I/O 或者非阻塞I/O
应用场景:高负载,高并发。

1 Buffer
ByteBuffer
2 Channel 全双工 同时支持读写操作。
网络读写:SelectableChannel,其子类:ServerSocketChannel和SocketChannel
文件操作:FileChannel
3、多路复用器Selector
Selector会不断地轮询注册在其上的Channel,如果某个Channel上面有新的TCP连接接入、读和写事件,这个Channel就处于就绪状态,会被Selector轮询出来,通过SelectionKey获取就绪Channel的集合,进行后继的I/O操作。

NIO编程优势:
1、客户端发起的连接操作时异步的,可以通过在多路复用器注册OP_CONNECT等待后继结果,不需要像之前的客户端那样被同步阻塞。
2、SocketChannel的读写操作都是异步的。
3、通过epoll实现,没有连接句柄数的限制。

JDK1.7 NIO2.0提供了AIO

AIO
通过java.util.concurrent.Future类来表示异步操作的结果;
在执行异步操作的时候传入一个java.nio.channels.



你可能感兴趣的:(netty)