Java中NIO、BIO、AIO相關概念及應用場景

一、同步阻塞IO(JAVA BIO):同步並阻塞,服務器實現模式爲一個鏈接一個線程,即客戶端有鏈接請求時,服務器端就須要啓動一個線程進行處理,若是這個鏈接不作任何事情會形成沒必要要的線程開銷,固然能夠經過線程池機制改善。編程

二、同步非阻塞IO(JAVA NIO):同步非阻塞,服務器實現模式一個請求一個線程,即客戶端發送的鏈接請求都會註冊到多路複用器上,多路複用器輪詢到鏈接有I/O請求時才啓動 一個線程進行處理。用戶進程也須要時不時的詢問IO操做是否就緒,這就要求用戶進程不停的去詢問。服務器

三、異步阻塞IO(JAVA NIO):此種方式下是指應用發起一個IO操做之後,不等待內核IO操做的完成,等內核完成IO操做之後會通知應用程序,這其實就是同步和異步最關鍵的區別,同步必須等待或者主動的去詢問IO是否完成,那麼爲調用來完成的,而select函數自己的實現方式是阻塞的,而採用select函數有個好處就是它能夠同時監聽多個文件句柄(若是從UNP的角度看,select屬於同步操做。由於select以後,進程還須要讀寫數據),從而提升系統的併發性。架構

四、異步非阻塞IO(JAVA AIO(NIO.2)):在此種模式下,用戶進程只須要發起一個IO操做而後當即返回,等IO操做真正的完成之後,應用程序會獲得IO操做完成的通知,此時用戶進程只須要對數據進行處理就行了,不須要進行實際的IO讀寫操做,由於真正的IO讀取或者寫入操做已經由內核完成了。併發

 

BIO、NIO、AIO適用場景分析:異步

  BIO方式適用於鏈接數目比較小且固定的架構,這種方式對服務器資源要求比較高,併發侷限於應用中,JDK1.4之前的惟一選擇,但程序直觀簡單易理解;函數

  NIO方式適用於鏈接數目多且鏈接比較短(輕操做)的架構,好比聊天服務器,併發侷限於應用中,編程比較複雜,JDK1.4開始支持;線程

  AIO方式適用於鏈接數目多且鏈接比較長(重操做)的架構,好比相冊服務器,充分調用OS參與併發操做,編程比較複雜,JDK7開始支持。進程

相關文章
相關標籤/搜索