您当前的位置:中国教育在线资讯正文

【软帝学院】java常用IO模型

放大字体  缩小字体 2019-12-29 22:59:25  阅读:5238 来源:自媒体 作者:王囧草

原标题:【软帝学院】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模型介绍,需求图解或具体教育的能够私信或谈论联络我。

责任编辑:

“如果发现本网站发布的资讯影响到您的版权,可以联系本站!同时欢迎来本站投稿!