IO Vs NIO

?一、IO(傳統阻塞式)
? ? 全稱?:Input/Output(輸入/輸出)
? ? 定義?:Java 1.0 引入的基礎 I/O 模型,基于流(Stream)的同步阻塞操作,線程在讀寫數據時會阻塞直到操作完成。


二、NIO(新式非阻塞式)
? ? ?全稱?:
? ? ? ? 官方名稱:New I/O(Java 1.4 引入的新 I/O 庫)
? ? ? ? 技術特性名稱:Non-blocking I/O(非阻塞 I/O)
? ? ?定義?:基于通道(Channel)和緩沖區(Buffer)的同步非阻塞模型,支持多路復用(Selector)和零拷貝等高并發優化。

? ? ?當采用阻塞式的模式時,需要通過accept、read、write這些阻塞式函數進行連接的創建,數據的讀取和寫出,函數返回必須等待這個動作的完成。

? ? ? ? 當調用accept時,必須有新的連接進來時,函數才會返回,并產生新的連接對象。

? ? ? ? 當調用read時,必須得有數據存在時或者連接斷開時,函數才會返回,返回值代表讀取到的數據量或者小于0代表連接斷開。

? ? ? ? 當調用write時,必須等待所發送的數據完全發送完畢或連接斷開時,函數才會返回。

? ? ? ? 基于阻塞的因素,導致軟件無法把多個連接的操作放置在一個線程內,因為如果這樣操作,一旦一個連接發生了阻塞,那么其它連接就無法順利操作下去。所以在這種模式下,通常需要為每個連接配置獨立線程,讀線程是必須的,寫線程依賴業務邏輯,或許可以混合在讀線程中(如果寫總是發生在讀信息之后)。

? ? ? ? 阻塞式模式,意味著10000個連接,至少必須開啟10000個線程為匹配業務,這個對系統的資源開銷太大了。

? ? ? ? 而非阻塞式IO則是為了解決上述問題,以達到高并發的目的。其實最終還是要完成連接的創建、數據的讀寫,設計思想在于是否能夠在做這些操作之前,提前知道是否有數據可讀或是否有空間可寫呢?

? ? ? ? 是的,操作系統都提供了一些內核到用戶態的通知消息,以通知新的連接創建到達、某個連接當下有多少數據可讀,某個連接當下有多少緩存區可寫入數據進行發送。

? ? ? ? 基于上述的這些通知機制,內部管理注冊的多個(10000個)連接,接收對應的通知消息,則可以知道每個連接的狀態,當外部輪訓調用select函數時,返回可讀或可寫的連接,在這個基礎上,外部再進行read或者write。read返回當前可讀到的數據,write寫入緩存可寫入,不再一次性強制寫完,函數返回真真寫入的數據量。

? ? ? ? 簡單來說,在系統的accept、read和write基礎上,添加了一個邏輯層,這一層內通過系統的通知消息,獲知每個連接的狀態信息,從而在通過這一層對應函數調用時,進行連接的狀態判別,避免調用進入系統級別的阻塞式流程。

? ? ? ? Java采用java.nio.channels.Selector類達成NIO的異步邏輯層。

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

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

相關文章

基于原生JavaScript前端和 Flask 后端的Todo 應用

Demo地址:https://gitcode.com/rmbnetlife/todo-app-js-flask.git Python Todo 應用 這是一個使用Python Flask框架開發的簡單待辦事項(Todo)應用,采用前后端分離架構。本項目實現了待辦事項的添加、刪除、狀態切換等基本功能,并提供了直觀…

005 ElasticSearch 許可證過期問題

ElasticSearch 許可證過期問題 項目啟動報錯 org.elasticsearch.client.ResponseException: method [GET], host [http://127.0.0.1:9200], URI [/_cluster/health/], status line [HTTP/1.1 403 Forbidden] {"error":{"root_cause":[{"type":…

哪些崗位最易被AI替代?

隨著AI技術高速演進,一場“職場大洗牌”正悄然上演。當ChatGPT出口成章、機器人能精準執勤,AI時代的“就業焦慮”已不再是空談。你是否認真思考過,自己所處的崗位是否也正面臨被AI邊緣化的風險? 以下幾類職業,已成為AI…

信號槽中 sender() 的作用

好的,sender() 是 Qt 框架中的一個重要函數,它用于獲取觸發當前槽函數的對象。在 Qt 的信號和槽機制中,一個信號可以連接到多個槽函數,而一個槽函數也可以被多個信號觸發。sender() 函數允許你在槽函數中確定是哪個對象觸發了當前信號。 信號和槽機制 在 Qt 中,信號和槽…

深度學習|pytorch基本運算

【1】引言 pytorch是深度學習常用的包,顧名思義,就是python適用的torch包,在python里面使用時直接import torch就可以調用。 需要注意的是,pytorch包與電腦配置、python版本有很大關系,一定要仔細閱讀安裝要求、找到…

DeepSeek 賦能數字人直播帶貨:技術革新重塑電商營銷新生態

目錄 一、引言二、DeepSeek 技術探秘2.1 DeepSeek 技術原理剖析2.2 DeepSeek 與其他大模型對比優勢 三、數字人直播帶貨現狀洞察3.1 數字人直播帶貨發展歷程回顧3.2 市場規模與增長趨勢分析3.3 現存問題與挑戰探討 四、DeepSeek 在數字人直播帶貨中的應用實例4.1 交個朋友的成功…

實驗設計與分析(第6版,Montgomery)第5章析因設計引導5.7節思考題5.11 R語言解題

本文是實驗設計與分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅玨生譯) 第5章析因設計引導5.7節思考題5.11 R語言解題。主要涉及方差分析&#xff0c;正態假設檢驗&#xff0c;殘差分析&#xff0c;交互作用圖。 dataframe<-data.frame( densityc(570,565,…

四、關系數據庫標準語言SQL_1

四、關系數據庫標準語言SQL_1 主要內容 4.1 SQL概述 SQL簡介 4.2 SOL的系統結構4.3 SQL數據定義 SQL的數據定義 4.5 SQL數據查詢4.6 SQL數據更新4.7 SQL中的視圖4.8 SQL的數據控制4.9 嵌入式SQL小結 4.1 SQL概述 主要內容 SQL簡介SQL的特點SQL的系統結構 SQL簡介 SQL&…

vscode的Embedded IDE創建keil項目找不到源函數或者無法跳轉

創建完Embedded IDE項目后跳轉索引很容易找不到源函數或者無法跳轉&#xff0c;原因是vscode工作區被eide覆蓋了&#xff0c;需要手動往當前目錄下的.vscode/c_cpp_properties.json里添加路徑 打開eide.json &#xff0c;找到folders&#xff0c; 里面的name是keil里工程的虛擬…

【Docker管理工具】部署Docker管理面板DweebUI

【Docker管理工具】部署Docker管理面板DweebUI 一、DweebUI介紹1.1 DweebUI 簡介1.2 主要特點1.3 使用場景 二、本次實踐規劃2.1 本地環境規劃2.2 本次實踐介紹 三、本地環境檢查3.1 檢查Docker服務狀態3.2 檢查Docker版本3.3 檢查docker compose 版本 四、下載DweebUI鏡像五、…

CentOS7.9環境離線部署docker和docker-compose的兩種方式

目 錄 一、yum安裝&#xff0c;使用rpm安裝包和相關依賴 1.1 準備rpm安裝包 1.2 將docker-23.0.4.tar.gz上傳至/opt目錄下 二、二進制文件方式安裝 三、安裝docker-compose 一、yum安裝&#xff0c;使用rpm安裝包和相關依賴 1.1 準備rpm安裝包 1&#xff09;在一臺與…

AI賦能SEO關鍵詞策略

內容概要 當前搜索引擎優化領域正經歷由人工智能驅動的范式革新。傳統關鍵詞研究依賴人工統計與經驗判斷&#xff0c;而AI技術通過多維數據建模與自然語言處理&#xff0c;實現了從用戶行為分析到語義關聯挖掘的系統升級。具體而言&#xff0c;智能語義解析技術可穿透表層搜索…

MonoPCC:用于內窺鏡圖像單目深度估計的光度不變循環約束|文獻速遞-深度學習醫療AI最新文獻

Title 題目 MonoPCC: Photometric-invariant cycle constraint for monocular depth estimation of endoscopic images MonoPCC&#xff1a;用于內窺鏡圖像單目深度估計的光度不變循環約束 01 文獻速遞介紹 單目內窺鏡是胃腸診斷和手術的關鍵醫學成像工具&#xff0c;但其…

使用基于Xsens慣性傳感器的動作捕捉技術測量人體工程學

由于單調和片面的體力消耗&#xff0c;牙科領域的從業者患肌肉骨骼疾病 (MSD) 的幾率很高。慣性測量單元 (IMU) 越來越成為評估工作姿勢風險的焦點。因此&#xff0c;本研究旨在使用基于慣性傳感器的運動捕捉 (MoCap) 評估人體工程學講座和培訓干預對牙科助理學生的姿勢風險和M…

抗輻照加固CANFD芯片:以車規級設計提升商業航天系統可靠性

摘要 商業航天領域的發展對電子系統的可靠性和抗輻照能力提出了更高要求。本文深入探討了抗輻照加固CANFD芯片如何借助車規級設計&#xff0c;增強商業航天系統的可靠性。本文以國科安芯CANFD芯片ASM1042為例&#xff0c;通過對芯片單粒子效應脈沖激光試驗報告、數據手冊及芯片…

VSCode+Cline 安裝配置及使用說明

安裝配置 打開VSCode&#xff0c;點擊左側Extension圖標&#xff0c;在彈出頁面中&#xff0c;檢索Cline&#xff0c;選擇Cline進行安裝。 安裝完畢&#xff0c;在左側會出現一個圖標&#xff0c;點擊圖標 選擇【Use your own API key】&#xff0c;在出來的界面中選擇大模型&…

【Linux 基礎知識系列】第二篇-Linux 發行版概述

一、什么是 Linux 發行版&#xff1f; Linux 發行版是指將 Linux 內核和應用程序、工具、庫等有機組合在一起&#xff0c;形成一個完整的操作系統。由于 Linux 的開源特性&#xff0c;任何人都可以在 Linux 內核的基礎上進行修改和定制&#xff0c;因此產生了許多不同的發行版…

深入理解Transformer架構:從原理到實踐

深入理解Transformer架構&#xff1a;從原理到實踐 引言 Transformer架構自2017年由Google在論文《Attention Is All You Need》中提出以來&#xff0c;已經徹底改變了自然語言處理(NLP)領域&#xff0c;并逐漸擴展到計算機視覺、語音識別等多個領域。本文將深入解析Transfor…

下載即轉化的商業密碼:解析華為應用商店CPD廣告的智能投放邏輯

在移動互聯網流量紅利見頂的背景下&#xff0c;華為應用市場憑借其終端生態優勢正成為開發者獲客的新藍海。數據顯示&#xff0c;2025年Q1華為應用商店全球分發量同比增長27%&#xff0c;其中CPD廣告因其"下載才付費"的精準特性&#xff0c;已成為金融、游戲、工具類…

Python+GEE+AI,從基礎到實戰,全面掌握遙感云大數據分析與可視化!涵蓋森林監測、洪澇災害、干旱評估、植被變化等熱點領域的實際應用方案

&#x1f50d; 遙感技術的飛躍與挑戰 隨著航空、航天以及近地空間遙感平臺的持續發展&#xff0c;遙感技術近年來取得了顯著進步。遙感數據的空間分辨率、時間分辨率、光譜分辨率以及數據量都大幅提升&#xff0c;呈現出典型的大數據特征。這為相關研究帶來了新的機遇&#xff…