溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java系統(tǒng)中I/O模型有哪些

發(fā)布時(shí)間:2021-11-18 09:21:32 來源:億速云 閱讀:147 作者:小新 欄目:大數(shù)據(jù)

小編給大家分享一下java系統(tǒng)中I/O模型有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

一、阻塞式I/O模型

java系統(tǒng)中I/O模型有哪些

備注:進(jìn)程調(diào)用recvfrom, 系統(tǒng)調(diào)用直到數(shù)據(jù)到達(dá)且數(shù)據(jù)被復(fù)制到應(yīng)用進(jìn)程的緩存區(qū)或者發(fā)生錯(cuò)誤時(shí)才返回結(jié)果,應(yīng)用進(jìn)程開始數(shù)據(jù)數(shù)據(jù)。特點(diǎn):圖示中第1步和第2步都是阻塞的。

二、非阻塞式I/O模型

java系統(tǒng)中I/O模型有哪些

備注:調(diào)用recvfrom時(shí)沒有數(shù)據(jù)返回,因此內(nèi)核轉(zhuǎn)而立即返回一個(gè)EWOULDBLOCK錯(cuò)誤;數(shù)據(jù)準(zhǔn)備好被復(fù)制到應(yīng)用進(jìn)程緩存區(qū),于是recvfrom成功返回。特點(diǎn):圖示第1步?jīng)]有阻塞;第2步阻塞;由于持續(xù)輪詢內(nèi)核調(diào)用recvfrom,耗費(fèi)大量CPU資源。

三、I/O復(fù)用模型

java系統(tǒng)中I/O模型有哪些

備注:I/O復(fù)用可以調(diào)用select/poll阻塞在這兩個(gè)系統(tǒng)調(diào)用中的某一個(gè)上,而不是阻塞在真正的I/O系統(tǒng)調(diào)用上。圖示中應(yīng)用進(jìn)程阻塞于select調(diào)用,等待數(shù)據(jù)報(bào)套接字變?yōu)榭勺x,當(dāng)select返回套接字可讀這一條件時(shí),調(diào)用recvfrom把所讀數(shù)據(jù)復(fù)制到應(yīng)用進(jìn)程緩沖區(qū)。特點(diǎn):select等待多個(gè)描述符就緒;即圖示中第1步可以等待多個(gè)文件描述符。與I/O復(fù)用密切相關(guān)的另一種I/O模型:在多線程中使用使用阻塞I/O;該模式?jīng)]有使用select阻塞在多個(gè)文件描述符上,而是使用多線程,每個(gè)文件描述符一個(gè)線程,這樣每個(gè)線程都可以自由地調(diào)用像recvfrom之類的阻塞式系統(tǒng)調(diào)用。

四、信號(hào)驅(qū)動(dòng)式I/O模型

java系統(tǒng)中I/O模型有哪些

備注:應(yīng)用程序開啟套接字的信號(hào)驅(qū)動(dòng)式I/O功能,通過sigaction系統(tǒng)調(diào)用安裝一個(gè)信號(hào)處理函數(shù)。系統(tǒng)調(diào)用立即返回,應(yīng)用程序繼續(xù)工作,即:非阻塞。當(dāng)數(shù)據(jù)報(bào)準(zhǔn)備好讀取后,內(nèi)核為該進(jìn)程產(chǎn)生一個(gè)SIGIO信號(hào)。進(jìn)而可以調(diào)用recvfrom讀取數(shù)據(jù)報(bào)。特點(diǎn):內(nèi)核在描述符就緒時(shí)發(fā)送SIGIO信號(hào)通知應(yīng)用程序,等待數(shù)據(jù)報(bào)的過程不被阻塞;即:圖示第1步不被阻塞。

五、異步I/O模型

java系統(tǒng)中I/O模型有哪些

備注:異步I/O由POSIX規(guī)范定義,工作機(jī)制:應(yīng)用進(jìn)程告訴內(nèi)核啟動(dòng)某個(gè)動(dòng)作,并在內(nèi)核處理整個(gè)過程含數(shù)據(jù)準(zhǔn)備以及數(shù)據(jù)從內(nèi)核空間復(fù)制到用戶空間完成后通知應(yīng)用進(jìn)程。應(yīng)用進(jìn)程在等待I/O完成期間不被阻塞。特點(diǎn):應(yīng)用進(jìn)程不被阻塞調(diào)用aio_read后立即返回;內(nèi)核在第1步和第2步全部完成后通知應(yīng)用進(jìn)程;支持該異步I/O模型的系統(tǒng)少見。

以上是“java系統(tǒng)中I/O模型有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI