1. 程式人生 > >BIO、NIO與AIO的區別

BIO、NIO與AIO的區別

IO的方式通常分為幾種,同步阻塞的BIO、同步非阻塞的NIO、非同步非阻塞的AIO。

    同步思想:就是當程式處理完一個請求或者操作的時候,再返回給使用者。使用者等待時間長,且不能關閉該程式或者這個頁面,必須等                   待該請求執行完,才能關閉或者其他操作,使用者體驗差。

    非同步思想:就是當程式發出一個請求後,響應給使用者,該請求已受理,你可以關閉或者操作其他事情,等處理完後再告訴使用者,此次                   操作已完成。

    阻塞思想:當一個執行緒在執行該操作時,如果有其他請求執行一樣的操作,那麼後來的請求就保持等待狀態,直到上一個執行緒執行完                     該操作後,才開始執行。

    非阻塞思想:當一個執行緒在執行該操作時,如果有其他請求執行一樣的操作,那麼該執行緒無需等待,直接執行該操作

經典故事案例:

  • 人物:老張
  • 道具:普通水壺(水燒開不響);響水壺(水燒開發出響聲)
  • 案例:
  1、同步阻塞:                             老張在廚房用普通水壺燒水,一直在廚房等著(阻塞),盯到水燒開(同步);                       2、非同步阻塞:                             老張在廚房用響水壺燒水,一直在廚房中等著(阻塞),直到水壺發出響聲(非同步),老張知道水燒開了;                       3、同步非阻塞:
                             老張在廚房用普通水壺燒水,在燒水過程中,就到客廳去看電視(非阻塞),然後時不時去廚房看看水燒開了沒                                                      (輪詢檢查同步結果);                       4、非同步非阻塞:                             老張在廚房用響水壺燒水,在燒水過程中,就到客廳去看電視(非阻塞),當水壺發出響聲(非同步),老張就知道                                                  水燒開了。

    BIO: 

        同步阻塞 IO

                在JDK1.4以前只要是網路IO操作,唯一的選擇就是使用BIO(同步阻塞),當一個執行緒處理客戶端的請求後,如果有其他客戶端請求過來,只能等待,直到上一個執行緒處理完請求後,才會處理該客戶端請求(單執行緒)。當然,也可以使用執行緒池來彌補該不足。但是執行緒的開啟是有限制的,不同的作業系統對執行緒開啟的數量都有不同的限制,如果執行緒數過多,作業系統會無法承擔如此數量的執行緒使用,會導致伺服器拒接客戶端的請求。最終結果是導致伺服器崩潰。因為執行緒的開銷是很大的。同理,BIO不適合應用在高併發的場景中。

    NIO:

        同步非阻塞 IO

                 在JDK1.4之後,支援NIO,在BIO中一個請求對應一個執行緒,但是NIO在此基礎上進行改善,其思想是當一個請求過來,會有一個類似管家的角色,該管家會不斷輪詢,如果有請求過來,會通知一個或者多個執行緒來處理,會有一個或多個執行緒專門來處理該請求,如果當前沒有請求,該執行緒就可以處理其他的操作,而無需等待客戶端的請求。NIO適用於多且短連線的場景,比如聊天室。

    AIO:

        非同步非阻塞 IO

                 在JDK1.7以後,支援AIO 在NIO的基礎上再進化,當IO請求過來時程式會響應該請求,但是具體的讀寫操作,交給作業系統來完成,當作業系統處理完後,通知該程式,此操作已處理完,再有該程式接管。


相關推薦

BIONIOAIO區別

IO的方式通常分為幾種,同步阻塞的BIO、同步非阻塞的NIO、非同步非阻塞的AIO。    同步思想:就是當程式處理完一個請求或者操作的時候,再返回給使用者。使用者等待時間長,且不能關閉該程式或者這個頁面,必須等                   待該請求執行完,才能關閉或

基礎 | BIONIOAIO

Java中的IO部分比較複雜,具體可參看書籍《Java NIO》和《Netty權威指南》。在此,僅對BIO、NIO和AIO進行概述性梳理,未涉及到具體實現細節,後續有空將深入展開。 同步IO和非同步IO 參考答案: IO操作主要分為兩個步驟,即發起IO請求和實際I

BIONIOAIO區別具體實現

一:理解同步:同步就是在發出一個*呼叫*時,在沒有得到結果之前,該*呼叫*就不返回,但是一旦呼叫返回,就得到返回值了。簡單的為:就是由*呼叫者*主動等待這個*呼叫*的結果。 二:非同步:*呼叫*在發出之後,這個呼叫就直接返回了,所以沒有返回結果;換句話說,當一個非同步過程呼

BIONIOAIO區別(簡明版)

      一:事件分離器         在IO讀寫時,把 IO請求 與 讀寫操作 分離調配進行,需要用到事件分離器。根據處理機制的不同,事件分離器又分為:同步的Reactor和非同步的Proactor。         Reactor模型: - 應用程式

Java中BIONIOAIO區別和應用場景

最近一直在準備面試,為了使自己的Java水平更上一個檔次,拜讀了李林峰老師的《Netty權威指南》,瞭解了Java關於IO的發展和最新的技術,真是受益匪淺,現在把我總結的關於BIO、NIO和AIO的區別

BIONIOAIO區別

  IO的方式通常分為幾種,同步阻塞的BIO、同步非阻塞的NIO、非同步非阻塞的AIO。 一、BIO 在JDK1.4出來之前,我們建立網路連線的時候採用BIO模式,需要先在服務端啟動一個ServerSocket,然後在客戶端啟動Socket來對服務端進行通訊,預設情況

BIONIOAIO

IO的方式通常分為幾種,同步阻塞的BIO、同步非阻塞的NIO、非同步非阻塞的AIO。 一、BIO      在JDK1.4出來之前,我們建立網路連線的時候採用BIO模式,需要先在服務端啟動一個ServerSocket,然後在客戶端啟動Socket來對服務端進行通訊,預設情

Java的BIONIOAIO介紹

1. I/O概念理解:同步/非同步、阻塞/非阻塞 一個IO操作其實分成了兩個步驟:發起IO請求和實際的IO操作。 同步IO和非同步IO的區別就在於第二個步驟是否阻塞,如果實際的IO讀寫阻塞請求程序,那麼就是同步IO。 阻塞IO和非阻塞IO的區別在於第一步,發

java高併發實戰(八)——BIONIOAIO

由於之前看的容易忘記,因此特記錄下來,以便學習總結與更好理解,該系列博文也是第一次記錄,所有有好多不完善之處請見諒與留言指出,如果有幸大家看到該博文,希望報以參考目的看瀏覽,如有錯誤之處,謝謝大家指出與留言。一、什麼是NIO?NIO是New I/O的簡稱,與舊式的基於流的I/

淺談 BIONIOAIO 區別

引言 BIO和NIO是兩種不同的網路通訊模型,現如今NIO已經大量應用在Jetty、ZooKeeper、Netty等開源框架中。 一個面向流、一個面向緩衝區 一個是阻塞式的、一個非阻塞 一個沒有io多路複用器、一個有 下面通過一個例子解釋兩者區別: 假設當前服

漫話:如何給女朋友解釋什麼是BIONIOAIO

​ 週末午後,在家裡面進行電話面試,我問了面試者幾個關於IO的問題,其中包括什麼是BIO、NIO和AIO?三者有什麼區別?具體如

BIONIOAIO及java中NIO netty的 IOCP區別聯絡

還沒有找到答案嗎?那我說一下吧iocp和poll/epoll這些是作業系統層面的東西iocp是win,poll(linux和unix)後者在linux上可以改成epoll,在mac或bsd上可以改成kqueue,效能更佳,使用netty的native transport特性,在vert.x最新版本中亦支援這兩

BIONIOAIO 區別和應用場景

前邊簡單介紹過IO的基本情況  Java IO流 簡單回顧 對於IO我們應該非常熟悉了,IO不僅僅針對檔案的操作,網路程式設計socket的通訊,就是IO操作。 輸入、輸出流(InputStream、OutputStream)用於讀取或寫入位元組,如操作圖片、視訊等。

Java中BIONIOAIO區別和應用場景

    學習IO,首先要明白四個東西。 1.同步         java自己去處理io。 2.非同步 java將io交給作業系統去處理,告訴快取區大小,處理完成回撥。 3.阻塞  使用阻塞IO時,Java呼叫會一直阻塞到讀寫完成才返回。 4.非阻塞 使用非阻塞IO時,如果不能立馬讀寫,Java呼叫會馬上返

talent-aio的使用和原理講解系列(一)--java bionioaio的io模型區別講解

   2017年春季開源中國要說最火的開源專案,即時通訊框架敢說第一,沒人敢說第二,當然現在是3月10日,它還能否火熱一年讓我們拭目以待。    雖然我不是talent-aio的作者,但也是掛名的開發

京東數科二面:常見的 IO 模型有哪些?Java 中的 BIONIOAIO 有啥區別

IO 模型這塊確實挺難理解的,需要太多計算機底層知識。寫這篇文章用了挺久,就非常希望能把我所知道的講出來吧!希望朋友們能有收貨!為了寫這篇文章,還翻看了一下《UNIX 網路程式設計》這本書,太難了,我滴乖乖!心痛~ _個人能力有限。如果文章有任何需要補充/完善/修改的地方,歡迎在評論區指出,共同進步!_

京東數科面試真題:常見的 IO 模型有哪些?Java 中的 BIONIOAIO 有啥區別

> 本文節選自[《Java面試進階指北 打造個人的技術競爭力》](https://www.yuque.com/docs/share/f37fc804-bfe6-4b0d-b373-9c462188fec7) 面試中經常喜歡問的一個問題,因為通過這個問題,面試官可以順便了解一下你的作業系統的水平。 IO

java IO(BIO)NIOAIO

.get ati NPU read end get dex 你好 nts IO 服務端ServerSocket 客戶端Socket 缺點每次客戶端建立連接都會另外啟一個線程處理。讀取和發送數據都是阻塞式的。 如果1000個客戶端建立連接將會產生1000個線程 Ser

Java的中BIONIOAIO-1

用戶 targe eee 技術 aio 下一步 caption page 情況下 Java的中BIO、NIO、AIO-1java 最近在項目中用到TCP通信來完成命令和運行結果的交互,用的是典型的TCP通信中的C/S架構,原因很簡單:在業務需求低的環境下,這種架構簡單、

Java的中BIONIOAIO-2

bili 成了 讀寫操作 個數 _for soc 傳統 輸出流 微軟雅黑 Java的中BIO、NIO、AIO-2java 舉個栗子 接上一篇接著說,C/S模式、Reactor模式、Proactor模式是服務器處理IO常用的處理模型,這一篇就來解釋一下這幾種模式