五大IO模型
- Blocking IO
- Non-Blocking IO
- I/O multiplexing (select and poll)
- signal driven I/O (SIGIO)
- Asynchronous I/O (the POSIX aio_functions)
NIO基于模式Reactor,AIO基于Proactor模式;Reactor and Proactor实际都是对各种I/O复用机制的封装;
参考:https://www.cnblogs.com/whyandinside/archive/2012/03/04/2379234.html
NIO(NEW IO) JDK1.4

Channel
类似与一个流,是双向的数据流通,既可以进行读操作也可以进行写操作;
类型:FileChannel SocketChanel ServerSocketChannel DatagramChannel
Buffer
Channel读取从Buffer中读取数据,也可以向Bufffer中写入数据;Buffer是java内存开辟的;
子类:ByteBuffer IntBuffer CharBuffer LongBuffer DoubleBuffer FloatBuffer ShortBuffer

Selector(选择器)
每一个channel注册函数到Seletor,然后一个线程执行select()轮询发生的IO事件;然后对这些事件进行相应处理;
当执行一个写文件操作,java发起写操作,注册一个channel到selector,一个额外的线程会去轮讯这个选择器,直到buffer写数据完成,通知channel,将内存中的buffer数据写入到磁盘文件;
参考:
http://tutorials.jenkov.com/java-nio/overview.html
http://www.cnblogs.com/dolphin0520/p/3919162.html
https://www.jianshu.com/p/8ad464ed516e
https://www.cnblogs.com/geason/p/5774096.html
Reator模式
是一种常见的处理并发IO的模式;属于同步IO;中心思想:将所有要处理的IO事件注册到IO多路复用器上,同时主线程阻塞在IO多路复用器上,一旦有IO事件到来,或准备就绪(文件描述符、或Socket 可读、可写);多路复用器返回;并将先注册的IO事件分发到对应的处理器中;
Reactor是一种事件驱动机制,如果有响应的事件发生,Reactor将主动调用应用程序注册的接口(回调函数);好莱坞原则,不要打电话给我们,我们会打电话通知你;
Reactor模式和Proactor模式
Reactor 和 Proacotor,最大的区别在于回调函数的使用; reactor:接收请求,注册回调函数,通知内核线程做IO;线程完成之后,通知请求的回调函数,进行读取内核数据到user Application; proactor:接收请求,系统做好IO准备,系统做IO,成功失败调用回调函数通知;
https://blog.csdn.net/skiof007/article/details/52873421
https://blog.csdn.net/u013074465/article/details/46276967
网友评论