BIO,NIO,AIO

來源:互聯網
上載者:User

標籤:

同步指的是使用者進程觸發IO操作並等待或者輪詢的去查看IO操作是否就緒

非同步是指使用者進程觸發IO操作以後便開始做自己的事情,而當IO操作已經完成的時候會得到IO完成的通知

阻塞和非阻塞是針對於進程在訪問資料的時候,根據IO操作的就緒狀態來採取的不同方式,說白了是一種讀取或者寫入操作函數的實現方式,阻塞方式下讀取或者寫入函數將一直等待,而非阻塞方式下,讀取或者寫入函數會立即返回一個狀態值。

,IO操作可以分為3類:

同步阻塞的BIO、同步非阻塞的NIO、非同步非阻塞的AIO

同步阻塞IO(JAVA BIO):
    同步並阻塞,伺服器實現模式為一個串連一個線程,即用戶端有串連請求時伺服器端就需要啟動一個線程進行處理,如果這個串連不做任何事情會造成不必要的線程開銷,當然可以通過線程池機制改善。

同步非阻塞IO(Java NIO) : 同步非阻塞,伺服器實現模式為一個請求一個線程,即用戶端發送的串連請求都會註冊到多工器上,多工器輪詢到串連有I/O請求時才啟動一個線程進行處理。使用者進程也需要時不時的詢問IO操作是否就緒,這就要求使用者進程不停的去詢問。

 

(Java AIO(NIO.2))非同步非阻塞IO: 
   在此種模式下,使用者進程只需要發起一個IO操作然後立即返回,等IO操作真正的完成以後,應用程式會得到IO操作完成的通知,此時使用者進程只需要對資料進行處理就好了,不需要進行實際的IO讀寫操作,因為真正的IO讀取或者寫入操作已經由核心完成了。

   

 

BIO是一個串連一個線程。

NIO是一個請求一個線程。

AIO是一個有效請求一個線程。

 

BIO、NIO、AIO適用情境分析:

    BIO方式適用於串連數目比較小且固定的架構,這種方式對伺服器資源要求比較高,並發局限於應用中,JDK1.4以前的唯一選擇,但程式直觀簡單易理解。

    NIO方式適用於串連數目多且串連比較短(輕操作)的架構,比如聊天伺服器,並發局限於應用中,編程比較複雜,JDK1.4開始支援。

    AIO方式使用於串連數目多且串連比較長(重操作)的架構,比如相簿伺服器,充分調用OS參與並行作業,編程比較複雜,JDK7開始支援

BIO,NIO,AIO

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.