美文网首页
Java IO 模型

Java IO 模型

作者: 93张先生 | 来源:发表于2019-11-21 21:59 被阅读0次

五大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

channels andbuffer.png
Channel

类似与一个流,是双向的数据流通,既可以进行读操作也可以进行写操作;

类型:FileChannel SocketChanel ServerSocketChannel DatagramChannel

Buffer

Channel读取从Buffer中读取数据,也可以向Bufffer中写入数据;Buffer是java内存开辟的;

子类:ByteBuffer IntBuffer CharBuffer LongBuffer DoubleBuffer FloatBuffer ShortBuffer


channels andbuffer.png
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

零拷贝

https://www.cnblogs.com/z-sm/p/6547709.html

相关文章

网友评论

      本文标题:Java IO 模型

      本文链接:https://www.haomeiwen.com/subject/lzsxwctx.html