首页 / JAVA / java常用的IO模型
java常用的IO模型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java常用的IO模型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1824字,纯文字阅读大概需要3分钟。
内容图文
![java常用的IO模型](/upload/InfoBanner/zyjiaocheng/648/bf684216528e4980ad9391933f662ee7.jpg)
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模型介绍,需要图解或详细教学的可以私信或评论联系我。
内容总结
以上是互联网集市为您收集整理的java常用的IO模型全部内容,希望文章能够帮你解决java常用的IO模型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。