Java的I/O演進之路

文章目錄

    • 通信技術整體解決的問題
    • 1 I/O 模型基本說明
    • 2 I/O模型
        • Java BIO
        • Java NIO
        • Java AIO
    • 3 BIO、NIO、AIO 適用場景分析

通信技術整體解決的問題

  • 局域網內的通信要求。
  • 多系統間的底層消息傳遞機制。
  • 高并發下,大數據量的通信場景需要。
  • 游戲行業。無論是手游服務端,還是大型的網絡游戲,Java語言都得到越來越廣泛的應用。

1 I/O 模型基本說明

I/O 模型:就是用什么樣的通道或者說是通信模式和架構進行數據的傳輸和接收,很大程度上決定了程序通信的性能,Java 共支持 3 種網絡編程的/IO 模型:BIO、NIO、AIO
實際通信需求下,要根據不同的業務場景和性能需求決定選擇不同的I/O模型

2 I/O模型

Java BIO

同步并阻塞(傳統阻塞型),服務器實現模式為一個連接一個線程,即客戶端有連接請求時服務器
端就需要啟動一個線程進行處理,如果這個連接不做任何事情會造成不必要的線程開銷 【簡單示意圖

在這里插入圖片描述

Java NIO

Java NIO : 同步非阻塞,服務器實現模式為一個線程處理多個請求(連接),即客戶端發送的連接請求都會注
冊到多路復用器上,多路復用器輪詢到連接有 I/O 請求就進行處理 【簡單示意圖】
在這里插入圖片描述

Java AIO

Java AIO(NIO.2) : 異步 異步非阻塞,服務器實現模式為一個有效請求一個線程,客戶端的I/O請求都是由OS先完成了再通知服務器應用去啟動線程進行處理,一般適用于連接數較
多且連接時間較長的應用

3 BIO、NIO、AIO 適用場景分析

1、BIO 方式適用于連接數目比較小且固定的架構,這種方式對服務器資源要求比較高,并發局限于應用中,JDK1.4以前的唯一選擇,但程序簡單易理解。
2、NIO 方式適用于連接數目多且連接比較短(輕操作)的架構,比如聊天服務器,彈幕系統,服務器間通訊等。
編程比較復雜,JDK1.4 開始支持。

3、AIO方式使用于連接數目多且連接比較長(重操作)的架構,比如相冊服務器,充分調用 OS 參與并發操作,
編程比較復雜,JDK7 開始支持。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210297.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210297.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210297.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

區塊鏈的可拓展性研究【04】分片

分片屬于layer1擴容 區塊鏈分片是一種技術實現,可以將區塊鏈網絡分成多個片段,每個片段負責處理一部分的交易數據。這種方法可以提高區塊鏈網絡的處理速度和吞吐量,降低交易確認時間和費用,同時也可以減輕節點運行負擔。 在傳統…

【出現模塊node_modules里面包找不到】

#pic_center R 1 R_1 R1? R 2 R^2 R2 目錄 一、出現的問題二、解決辦法三、其它可供參考 一、出現的問題 在本地運行 npm run docs:dev之后,出現 Error [ERR_MODULE_NOT_FOUND]: Cannot find package Z:\Blog\docs\node_modules\htmlparser2\ imported from Z:\Blo…

微信小程序base64與十六進制相互轉換(使用btoa、atob方法報undefined)

前言:搜到很多方法都用到了btoa()、atob(),這兩個屬于Window 對象,在瀏覽器端可以直接使用,但是在小程序里面使用會報undefined。看到uniapp和微信小程序官方文檔都提供了下面兩個api,就想著經過ArrayBuffer 對象轉換一…

入門Redis學習總結

記錄之前剛學習Redis 的筆記, 主要包括Redis的基本數據結構、Redis 發布訂閱機制、Redis 事務、Redis 服務器相關及采用Spring Boot 集成Redis 實現增刪改查基本功能 一:常用命令及數據結構 1.Redis 鍵(key) # 設置key和value 127.0.0.1:6379> set …

解釋AI決策,這10個強大的 Python 庫記得收藏!

本文整理了10個常用于可解釋AI的Python庫,方便我們更好的理解AI模型的決策。 什么是XAI? XAI(Explainable AI)的目標是為模型的行為和決策提供合理的解釋,這有助于增加信任、提供問責制和模型決策的透明度。XAI 不僅…

《深入淺出進階篇》洛谷P3197 越獄——集合

洛谷P3197 越獄 題目大意: 監獄有 n 個房間,每個房間關押一個犯人,有 m 種宗教,每個犯人會信仰其中一種。如果相鄰房間的犯人的宗教相同,就可能發生越獄,求有多少種狀態可能發生越獄。 答案對100,003 取模。…

Temu賣家如何獲取流量?Temu新手賣家流量來源哪里?——站斧瀏覽器

流量對于每個平臺來說都是很重要的,那么Temu賣家如何獲取流量?流量來源哪里? Temu賣家如何獲取流量? 1、優化產品標題和描述:在Temu平臺上,買家通常通過搜索關鍵詞來尋找他們感興趣的產品。因此&#xff…

【數電筆記】58-同步D觸發器

目錄 說明: 1. 電路組成 2. 邏輯功能 3. 特性表、特性方程 4. 狀態轉移圖 例題 5. 同步D觸發器的特點 6. 集成同步D觸發器:74LS375 74LS375內部原理 說明: 筆記配套視頻來源:B站本系列筆記并未記錄所有章節,…

服務器部署網易開源TTS | EmotiVoice部署教程

一、環境 ubuntu 20.04 python 3.8 cuda 11.8二、部署 1、docker方式部署 1.1、安裝docker 如何安裝docker,可以參考這篇文章 1.2、拉取鏡像 docker run -dp 127.0.0.1:8501:8501 syq163/emoti-voice:latest2、完整安裝 安裝python依賴 conda create -n Emo…

Web 開發的 20 個實用網站

Web 開發的 20 個實用網站 作為一名前端開發工程師,我們一定使用過很多工具來提高自己的工作效率。它們可以是網站、文檔或 JavaScript 庫。 本文將分享30個有趣的網站。 JavaScript正則表達式可視化工具 https://jex.im/regulex/#!flags&re%5E(a%7Cb)*%3F%…

Centos7及Ubuntu系統安裝指定版本dockerdocker-compose安裝

Centos7系統 docker指定版本安裝【官方文檔步驟】 官方文檔地址:https://docs.docker.com/engine/install/centos/ # 1.安裝yum工具及設置docker-ce鏡像庫 sudo yum install -y yum-utils# 國外的鏡像下載太慢了改成阿里云鏡像庫 sudo yum-config-manager --add-rep…

★102. 二叉樹的層序遍歷

102. 二叉樹的層序遍歷 很巧妙的,又學習了一種層次遍歷的方法,就是說根據當前的隊列的長度去遍歷,遍歷的當前隊列的長度就是該層次的節點個數。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* Tr…

AIGC專題報告:AIGC助力大規模對象存儲服務OSS的能效提升

今天分享的AIGC系列深度研究報告:《AIGC專題報告:AIGC助力大規模對象存儲服務OSS的能效提升》。 (報告出品方:全球軟件開發大會) 報告共計:18頁 結合AI的智能運維助力能效提升 場景1:通過 AI…

SpringMVC-Servlet

依賴 <dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version> </dependency>web.xml 4.0版本 <?xml version"1.0" encoding"UTF-8"?> <…

Python 網絡爬蟲(三):XPath 基礎知識

《Python入門核心技術》專欄總目錄?點這里 文章目錄 1. XPath簡介2. XPath語法2.1 選擇節點2.2 路徑分隔符2.3 謂語2.4 節點關系2.5 運算符3. 節點3.1 元素節點(Element Node)3.2 屬性節點(Attribute Node)

前端vue3——實現二次元人物拼圖校驗

文章目錄 ?前言?vue3拖拽實現拼圖&#x1f496; 思路分解&#x1f496; 布局結構&#x1f496; 拖拽函數&#x1f496; 校驗函數&#x1f496; inscode整體代碼 ?運行效果&#x1f496; 隨機順序&#x1f496; 拖拽中&#x1f496; 校驗失敗&#x1f496; 校驗通過 ?總結?…

IDEA中.java .class .jar的含義與聯系

當使用IntelliJ IDEA這樣的集成開發環境進行Java編程時&#xff0c;通常涉及.java源代碼文件、.class編譯后的字節碼文件以及.jar可執行的Java存檔文件。 1. .java 文件&#xff1a; 1.這些文件包含了Java源代碼&#xff0c;以文本形式編寫。它們通常位于項目中的源代碼目錄中…

蒼穹外賣項目筆記(8)— 緩存商品、購物車功能

前言 代碼鏈接&#xff1a; Echo0701/take-out? (github.com) 1 緩存菜品 1.1 問題說明 【注】很多時候系統性能的瓶頸就在于數據庫這端 1.2 實現思路 通過 Redis 來緩存數據&#xff0c;減少數據庫查詢操作 【注】Redis 基于內存來保存數據的&#xff0c;訪問 Redis 數據…

LeetCode208.實現Trie(前綴樹)

我一開始想題目叫前綴樹&#xff0c;是要用樹嗎&#xff1f;但是不知道用樹怎么寫&#xff0c;然后我就花了10多分鐘&#xff0c;用了HashMap解了。map的key是word&#xff0c;value是一個放了word的所有前綴的set&#xff0c;這樣search方法就非常簡單了&#xff0c;只要看has…

Leetcode—2048.下一個更大的數值平衡數【中等】

2023每日刷題&#xff08;五十四&#xff09; Leetcode—2048.下一個更大的數值平衡數 實現代碼 class Solution { public:int nextBeautifulNumber(int n) {for(int x n 1; ; x) {vector<int> cnt(10, 0);for(int y x; y > 0; y / 10) {cnt[y%10];}bool ok tru…