欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中網(wǎng)絡IO的實現(xiàn)方式(BIO、NIO、AIO)介紹

 更新時間:2017年03月17日 09:51:47   投稿:lqh  
這篇文章主要介紹了Java中網(wǎng)絡IO的實現(xiàn)方式(BIO、NIO、AIO)介紹的相關(guān)資料,需要的朋友可以參考下

在網(wǎng)絡編程中,接觸到最多的就是利用Socket進行網(wǎng)絡通信開發(fā)。在Java中主要是以下三種實現(xiàn)方式BIO、NIO、AIO。

關(guān)于這三個概念的辨析以前一直都是好像懂,但是表達的不是很清楚,下面做個總結(jié)完全辨析清楚。

1. BIO方式

首先我用一個較為通俗的語言來說明:

BIO 就是阻塞IO,每個TCP連接進來服務端都需要創(chuàng)建一個線程來建立連接并進行消息的處理。如果中間發(fā)生了阻塞(比如建立連接、讀數(shù)據(jù)、寫數(shù)據(jù)時發(fā)生阻礙),線程也會發(fā)生阻塞,并發(fā)情況下,N個連接需要N個線程來處理。
這種方式的缺點就是:并發(fā)情況下效率很低。

下面用一個圖示來說明BIO的工作情況

2. NIO方式

NIO是JDK1.4提出的,還是先用一段通俗的話來說明NIO的工作原理:

NIO 也就是非阻塞IO,是基于事件驅(qū)動的思想(Reactor線程模型)。對比與BIO來說,NIO使用一個線程來管理所有的Socket 通道,也就是基于Selector機制,當查詢到事件時(連接、接受連接、讀、寫),就會轉(zhuǎn)發(fā)給不同的處理線程(handler)。

下面給出Reactor模型的工作應用圖:

3. AIO方式

AIO是JDK1.7提出的,也就是異步IO。AIO采用的是Proactor模式。我們首先應該辨析的是AIO和NIO的區(qū)別:

(1)NIO的通知是發(fā)生在Handler之前;
(2)AIO的通知是發(fā)生在讀寫等處理之后的回調(diào),有通知時表示相關(guān)操作已經(jīng)結(jié)束了。

AIO在進行讀寫操作時,只需要調(diào)用相應的read/write方法,并傳入CompletionHandler(動作完成時處理器),在動作完成后會調(diào)用CompletionHandler。 NIO的通知是發(fā)生在動作之前,是在可讀可寫的時候,Selector發(fā)現(xiàn)了這些事件后就通知并調(diào)用Handler處理,

下面給出Proactor模式的工作流程圖:

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • IDEA不識別Java文件:文件變橙色&顯示后綴名.java的解決

    IDEA不識別Java文件:文件變橙色&顯示后綴名.java的解決

    這篇文章主要介紹了IDEA不識別Java文件:文件變橙色&顯示后綴名.java的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • spring BeanProcessor接口詳解

    spring BeanProcessor接口詳解

    這篇文章主要介紹了spring BeanProcessor接口的相關(guān)資料,幫助大家更好的理解和學習使用spring,感興趣的朋友可以了解下
    2021-03-03
  • Java實現(xiàn)inputstream流的復制代碼實例

    Java實現(xiàn)inputstream流的復制代碼實例

    這篇文章主要介紹了Java實現(xiàn)inputstream流的復制代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Java獲取控制臺輸入的兩種方法小結(jié)

    Java獲取控制臺輸入的兩種方法小結(jié)

    這篇文章主要介紹了Java獲取控制臺輸入的兩種方法小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java文件斷點續(xù)傳實現(xiàn)原理解析

    Java文件斷點續(xù)傳實現(xiàn)原理解析

    這篇文章主要介紹了Java文件斷點續(xù)傳實現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • SpringBoot整合WebSocket實現(xiàn)實時通信功能

    SpringBoot整合WebSocket實現(xiàn)實時通信功能

    在當今互聯(lián)網(wǎng)時代,實時通信已經(jīng)成為了許多應用程序的基本需求,而WebSocket作為一種全雙工通信協(xié)議,為開發(fā)者提供了一種簡單、高效的實時通信解決方案,本文將介紹如何使用SpringBoot框架來實現(xiàn)WebSocket的集成,快速搭建實時通信功能,感興趣的朋友可以參考下
    2023-11-11
  • springBoot項目打包idea的多種方法

    springBoot項目打包idea的多種方法

    這篇文章主要介紹了springBoot項目打包idea的多種方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 基于java Springboot實現(xiàn)教務管理系統(tǒng)詳解

    基于java Springboot實現(xiàn)教務管理系統(tǒng)詳解

    這篇文章主要介紹了Java 實現(xiàn)簡易教務管理系統(tǒng)的代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • SpringBoot中application.properties與application.yml區(qū)別小結(jié)

    SpringBoot中application.properties與application.yml區(qū)別小結(jié)

    本文主要介紹了SpringBoot中application.properties與application.yml區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-10-10
  • JDK8通過Stream 對List,Map操作和互轉(zhuǎn)的實現(xiàn)

    JDK8通過Stream 對List,Map操作和互轉(zhuǎn)的實現(xiàn)

    這篇文章主要介紹了JDK8通過Stream 對List,Map操作和互轉(zhuǎn)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09

最新評論