您好,登錄后才能下訂單哦!
小編給大家分享一下java系統中I/O模型有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
備注:進程調用recvfrom, 系統調用直到數據到達且數據被復制到應用進程的緩存區或者發生錯誤時才返回結果,應用進程開始數據數據。特點:圖示中第1步和第2步都是阻塞的。
備注:調用recvfrom時沒有數據返回,因此內核轉而立即返回一個EWOULDBLOCK錯誤;數據準備好被復制到應用進程緩存區,于是recvfrom成功返回。特點:圖示第1步沒有阻塞;第2步阻塞;由于持續輪詢內核調用recvfrom,耗費大量CPU資源。
備注:I/O復用可以調用select/poll阻塞在這兩個系統調用中的某一個上,而不是阻塞在真正的I/O系統調用上。圖示中應用進程阻塞于select調用,等待數據報套接字變為可讀,當select返回套接字可讀這一條件時,調用recvfrom把所讀數據復制到應用進程緩沖區。特點:select等待多個描述符就緒;即圖示中第1步可以等待多個文件描述符。與I/O復用密切相關的另一種I/O模型:在多線程中使用使用阻塞I/O;該模式沒有使用select阻塞在多個文件描述符上,而是使用多線程,每個文件描述符一個線程,這樣每個線程都可以自由地調用像recvfrom之類的阻塞式系統調用。
備注:應用程序開啟套接字的信號驅動式I/O功能,通過sigaction系統調用安裝一個信號處理函數。系統調用立即返回,應用程序繼續工作,即:非阻塞。當數據報準備好讀取后,內核為該進程產生一個SIGIO信號。進而可以調用recvfrom讀取數據報。特點:內核在描述符就緒時發送SIGIO信號通知應用程序,等待數據報的過程不被阻塞;即:圖示第1步不被阻塞。
備注:異步I/O由POSIX規范定義,工作機制:應用進程告訴內核啟動某個動作,并在內核處理整個過程含數據準備以及數據從內核空間復制到用戶空間完成后通知應用進程。應用進程在等待I/O完成期間不被阻塞。特點:應用進程不被阻塞調用aio_read后立即返回;內核在第1步和第2步全部完成后通知應用進程;支持該異步I/O模型的系統少見。
以上是“java系統中I/O模型有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。