Java網(wǎng)絡(luò)編程之IO模型阻塞與非阻塞簡要分析
1.阻塞I/O模型
阻塞IO模型是常見的IO模型,在讀寫數(shù)據(jù)時客戶端會發(fā)生阻塞。阻塞IO模型的工作流程為:
1.1在用戶線程發(fā)出IO請求之后,內(nèi)核會檢查數(shù)據(jù)是否就緒,此時用戶線程一直阻塞等待內(nèi)存數(shù)據(jù)就緒;
1.2在內(nèi)存數(shù)據(jù)就緒后,內(nèi)核將數(shù)據(jù)復制到用戶線程中,并返回I/O執(zhí)行結(jié)果到用戶線程,此時用戶線程將解除阻塞狀態(tài)并開始處理數(shù)據(jù)。
典型的阻塞I/O模型的例子為data= socket.read(),如果內(nèi)核數(shù)據(jù)沒有就緒, Socket線程就會一直阻塞在 reado中等待內(nèi)核數(shù)據(jù)就緒。
2.非阻塞I/O模型
非阻塞I/O模型指用戶線程在發(fā)起一個操作后,無須阻塞便可以馬上得到內(nèi)核返回的一個結(jié)果。如果內(nèi)核返回的結(jié)果為fase,則表示內(nèi)核數(shù)據(jù)還沒準備好,需要稍后再發(fā)起I/O操作。一旦內(nèi)核中的數(shù)據(jù)準備好了,并且再次收到用戶線程的請求,內(nèi)核就會立刻將數(shù)據(jù)復制到用戶線程中并將復制的結(jié)果通知用戶線程。
在非阻塞IO模型中,用戶線程需要不斷詢問內(nèi)核數(shù)據(jù)是否就緒,在內(nèi)存數(shù)據(jù)還未就緒時,用戶線程可以處理其他任務(wù),在內(nèi)核數(shù)據(jù)就緒后可立即獲取數(shù)據(jù)并執(zhí)行相應(yīng)的操作。典型的非阻塞IO模型一般如下:
import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Test7 { public static void main(String[] args) throws IOException { ServerSocket socket=new ServerSocket(); while(true){ Socket data=socket.accept(); if (data!=null) { //數(shù)據(jù)處理完畢 break;} else { //內(nèi)核數(shù)據(jù)未處理完成,進行其他線程業(yè)務(wù) } } } }
以上就是Java網(wǎng)絡(luò)編程之IO模型阻塞與非阻塞簡要分析的詳細內(nèi)容,更多關(guān)于java模型IO阻塞與非阻塞的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring Boot+Nginx實現(xiàn)大文件下載功能
相信很多小伙伴,在日常開放中都會遇到大文件下載的情況,大文件下載方式也有很多,比如非常流行的分片下載、斷點下載;當然也可以結(jié)合Nginx來實現(xiàn)大文件下載,在中小項目非常適合使用,這篇文章主要介紹了Spring Boot結(jié)合Nginx實現(xiàn)大文件下載,需要的朋友可以參考下2024-05-05java socket實現(xiàn)聊天室 java實現(xiàn)多人聊天功能
這篇文章主要為大家詳細介紹了java socket實現(xiàn)聊天室,java實現(xiàn)多人聊天功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07response.setContentType()參數(shù)以及作用詳解
這篇文章主要介紹了response.setContentType()參數(shù)以及作用詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08java ExecutorService CompletionService線程池區(qū)別與選擇
這篇文章主要為大家介紹了java ExecutorService CompletionService線程池區(qū)別與選擇使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09java用接口、多態(tài)、繼承、類計算三角形和矩形周長及面積的方法
這篇文章主要介紹了java用接口、多態(tài)、繼承、類計算三角形和矩形周長及面積的方法,涉及java面向?qū)ο笾蓄?、接口、多態(tài)等的使用技巧,需要的朋友可以參考下2015-05-05