java常用的IO模型_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java常用的IO模型

java常用的IO模型

 2019/12/30 0:40:18  王囧草  程序员俱乐部  我要评论(0)
  • 摘要:IO模型区分一个输入操作通常包括两个阶段:等待数据准备好从内核向进程复制数据对于一个套接字上的输入操作,第一步通常涉及等待网络数据从网络到达。当所等待数据到达后,它被复制到内核中的某个缓冲区。第二部就是把数据从内核缓冲区复制到应用进程缓冲区。同步IO和异步IO的区别就在于第二个步骤是否阻塞,如果实际的IO读写阻塞请求过程,那么就是同步IO,因此阻塞IO、非阻塞IO、IO复用、信号驱动IO都是同步IO,如果不阻塞,而是操作系统帮你做完IO操作再将结果返回给你,那么就是异步IO
  • 标签:常用 Java IO模型
IO模型
区分
一个输入操作通常包括两个阶段:
等待数据准备好
内核向进程复制数据
对于一个套接字上的输入操作,第一步通常涉及等待网络数据从网络到达。当所等待数据到达后,它被复制到内核中的某个缓冲区。第二部就是把数据从内核缓冲区复制到应用进程缓冲区。
同步IO和异步IO的区别就在于第二个步骤是否阻塞,如果实际的IO读写阻塞请求过程,那么就是同步IO,因此阻塞IO、非阻塞IO、IO复用、信号驱动IO都是同步IO,如果不阻塞,而是操作系统帮你做完IO操作再将结果返回给你,那么就是异步IO。
阻塞IO和非阻塞IO的区别在第一步,发起IO请求是否会被阻塞,如果阻塞直到完成那么就是传统的阻塞IO,如果不阻塞,那么就是非阻塞IO。

阻塞式IO
应用进程被阻塞,知道数据复制到应用进程缓冲区才返回。在阻塞过程中,其他程序还可以执行,因此阻塞并不意味着整个操作系统被阻塞。因为其他程序还可以运行,因此不消耗CPU时间,这种模型的CPU利用率会比较高。

非阻塞IO
应用程序执行系统调用之后,内核返回一个错误码。应用程序还可以继续运行,但是需要不断的执行系统调用来获知IO是否完成,这种方式成为轮询。
由于CPU要处理更多的系统调用,因此这种模型的CPU利用率比较低。

IO复用
使用select或者poll等待数据,并且可以等待多个套接字中的任何一个变为可读。这一过程会被阻塞,当某一个套接字可读时返回,之后使用recvfrom把数据从内核复制到进程中。

它可以让但个进程具有处理多个I/O事件的能力,又被称为Event Driven IO,即事件驱动IO。

信号驱动IO
应用进程使用sigaction系统调用,内核立即被返回,应用进程可以继续执行,也就是说等待数据阶段应用程序时非阻塞的。内核在数据到达时向应用进程发送SIGIO信号,应用进程收到之后在信号处理程序中调用recvfrom将数据从内核中复制到应用进程。
相比于非阻塞IO的轮询方式,信号驱动I/O的CPU利用率更高。

异步IO
应用进程执行aio_read系统调用会立即返回,应用进程可以继续执行,不会被阻塞,内核会在所有操作完成之后向应用进程发送信号。
异步IO与信号驱动IO的区别在于,异步IO的信号是通知应用进程IO完成,而驱动IO的信号是通知应用程序可以开始IO。
以上就是常见的五种IO模型介绍,需要图解或详细教学的可以私信或评论联系我。

上一篇: 快2020年了,java真的还很好找工作? 下一篇: 没有下一篇了!
发表评论
用户名: 匿名