Web Server項目實戰2-Linux上的五種IO模型

上一節內容的補充:I/O多路復用是同步的,只有調用某些API才是異步的

Unix/Linux上的五種IO模型

a.阻塞 blocking

調用者調用了某個函數,等待這個函數返回,期間什么也不做,不停地去檢查這個函數有沒有返回,必須等這個函數返回才能進行下一步動作。

b.非阻塞 non-blocking

非阻塞等待,每隔一段時間就去檢測IO事件是否就緒,沒有就緒時可以去做其他事。非阻塞IO執行系統調用時總是立即返回,不管事件是否已經發生,若事件沒有發生,則返回-1,此時可以根據errno區分這兩種情況,對于 accept, recv, send 這些事件未發生時,errno 通常被設置為 EAGAIN

c. IO復用 IO multiplexing

Linux用 select/poll/epoll 函數實現 IO 復用模型,這些函數也回使進程阻塞,但是和阻塞 IO 所不同的是這些函數可以同時阻塞多個 IO 操作。而且可以同時對多個讀操作、寫操作的 IO 函數進行檢測,直到有數據可讀或可寫時,才真正調用 IO 操作函數。

*注意:IO 復用的目的并不是提高程序處理多個客戶端的能力,單線程、單進程同時檢測多個文件描述符是否可以執行 IO 操作的能力

d.信號驅動 signal-driven

Linux用套接口進行信號驅動 IO ,安裝一個信號處理函數,進程繼續運行并不阻塞,當 IO 事件就緒,進程收到 SIGIO 信號,然后處理 IO 事件。

在上圖中,“等待數據”為階段一,“數據從內核空間拷貝到用戶空間”為階段二。內核在階段一是異步的,在階段二是同步的;與非阻塞 IO 的區別在于它提供了消息通過機制,不需要用戶進程不斷地輪詢檢查,減少了系統 API? 的調用次數,提高了效率。

e.異步 asynchronous

Linux中,可以調用 aio_read 函數告訴內核文件描述符緩沖區指針和大小、文件偏移量及通知的方式,然后立即返回,此時用戶進程可以去做自己的事情。當內核將數據拷貝到緩沖區后,再通知應用程序。

以上五種 IO 模型,在實際應用中,最常用的是非阻塞模型 IO 復用模型。

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

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

相關文章

Offline RL : Beyond Reward: Offline Preference-guided Policy Optimization

ICML 2023 paper code preference based offline RL,基于HIM,不依靠額外學習獎勵函數 Intro 本研究聚焦于離線偏好引導的強化學習(Offline Preference-based Reinforcement Learning, PbRL),這是傳統強化學習&#x…

輕量音樂網站程序源碼,在線音樂免費聽歌

這是一個高品質的音樂共享和流媒體平臺,用戶可以在這個網站上免費在線聽歌。這個輕量級的音樂網站程序源碼,是您創建自己的音樂流媒體網站的最佳選擇!它還支持制作插件,并且在更新后,您可以保留您的自定義設置。 下 載…

操作系統408考研-經典例題

什么是操作系統?答:操作系統,是計算機系統中最基本、最重要的系統軟件,是其它軟件 的***支撐***。控制和管理計算機系統的硬件和軟件資源,合理的組織計算機工 作流程,并為用戶使用計算機提供公共和基本的服務 2.多道程序 (multiprogrammming) 和多重處理 (multiprocessi…

Python基于PyQt6制作GUI界面——多選框

QCheckBox 是 PyQt6 中的一個復選框控件&#xff0c;它允許用戶通過單擊來選擇或取消選擇某個選項。與 QRadioButton 不同&#xff0c;QCheckBox 控件并不互斥&#xff0c;這意味著用戶可以同時選擇多個 QCheckBox。示例對應的制作的 ui文件 界面如下所示。 <?xml version…

【MATLAB源碼-第215期】基于matlab的8PSK調制CMA均衡和RLS-CMA均衡對比仿真,對比星座圖和ISI。

操作環境&#xff1a; MATLAB 2022a 1、算法描述 CMA算法&#xff08;恒模算法&#xff09; CMA&#xff08;Constant Modulus Algorithm&#xff0c;恒模算法&#xff09;是一種自適應盲均衡算法&#xff0c;主要用于消除信道對信號的碼間干擾&#xff08;ISI&#xff09;…

Python使用thread模塊實現多線程

介紹&#xff1a; 線程&#xff08;Threads&#xff09;是操作系統提供的一種輕量級的執行單元&#xff0c;可以在一個進程內并發執行多個任務。每個線程都有自己的執行上下文&#xff0c;包括棧、寄存器和程序計數器。 在Python中&#xff0c;可以使用threading模塊創建和管理…

SQL練習2.3

建表 # 學生表 create table t_student (stu_id varchar(10),stu_name varchar(10),stu_age datetime,stu_sex varchar(10) );# 課程表 create table t_t_course (c_id varchar(10),c_name varchar(10),c_teaid varchar(10) );# 教師表 create table t_t_teacher (tea…

nginx 動靜分離、gzip壓縮、負載均衡、root/alias

在Nginx中&#xff0c;動靜分離、gzip壓縮、負載均衡以及root和alias指令是常見的配置和優化點。下面我將分別解釋這些概念和如何配置它們。 動靜分離 動靜分離是指將動態請求和靜態請求分開處理&#xff0c;由不同的服務器或Nginx的不同位置來處理。這樣可以提高網站的性能和…

SpringBoot 啟動報錯,EnableConfigurationProperties 注解跳坑記

使用SpringBoot 腳手架搭建的一個簡單的 web demo &#xff0c;開啟了屬性自動注入&#xff0c;配置文件如下&#xff1a; Setter Getter Configuration ConfigurationProperties(prefix "com.ff") EnableConfigurationProperties(FFProperties.class) public clas…

今日刷三題(day14):ISBN號碼+kotori和迷宮+矩陣最長遞增路徑

題目一&#xff1a;ISBN號碼 題目描述&#xff1a; 每一本正式出版的圖書都有一個ISBN號碼與之對應&#xff0c;ISBN碼包括9位數字、1位識別碼和3位分隔符&#xff0c;其規定格式如“x-xxx-xxxxx-x”&#xff0c;其中符號“-”是分隔符&#xff08;鍵盤上的減號&#xff09;&…

STM32使用旋轉編碼開關

一、旋轉編碼開關如何工作 編碼器內部有一個開槽圓盤&#xff0c;連接到公共接地引腳 C。它還具有兩個接觸針 A 和 B&#xff0c;如下所示。 當您轉動旋鈕時&#xff0c;A 和 B 按照特定順序與公共接地引腳 C 接觸&#xff0c;具體順序取決于轉動旋鈕的方向。 當它們與公共地接…

在 package.json 文件中,版本號前的 ^ 符號含義

在 package.json 文件中&#xff0c;版本號前的 ^ 符號有特定的含義&#xff0c;它控制了包依賴的版本范圍。 具體來說&#xff0c;^ 符號表示兼容性范圍符號&#xff0c;允許安裝與指定版本兼容的更新版本。 例如&#xff0c;“vue”: “^3.0.0” 意味著&#xff1a; 可以安…

Web3 游戲平臺 Creo Engine 銷毀代幣總量的20%,以促進長遠發展

Creo Engine 5月16日進行了第三次代幣銷毀&#xff0c;這次的銷毀占代幣總量的 20%。一共銷毀了2億 $CERO 代幣&#xff0c;市場價值接近 2000 萬美元。 Creo Engine 致力于連接世界、為玩家提供一站式游戲中心&#xff0c;并提升 Web3 游戲體驗。 Creo Engine 發布于2022年&am…

USB抓包工具:bushound安裝及使用

一、環境搭建 下載busbound6.01安裝包&#xff0c;安裝完成&#xff0c;重啟電腦。 二、工具配置 按照下圖配置工具&#xff1a; 使能自動識別新設備 2. 設置抓取數據的容量 三、抓包 回到capture選項卡&#xff0c;在頁面的右下角有個run的按鈕&#xff0c;點擊使能&…

RedHat9 | 磁盤管理

硬盤分區類型 MBR分區方案 MBR也被稱為主引導記錄&#xff0c;它存在0柱面0磁道0扇區內&#xff0c;在磁盤的第一個扇區內&#xff0c;大小為512字節 512字節包含&#xff1a;446字節初始化程序加載器、64字節分區表、2字節校驗碼由于每個分區為16字節&#xff0c;所以MBR只…

Git配置詳解

天行健&#xff0c;君子以自強不息&#xff1b;地勢坤&#xff0c;君子以厚德載物。 每個人都有惰性&#xff0c;但不斷學習是好好生活的根本&#xff0c;共勉&#xff01; 文章均為學習整理筆記&#xff0c;分享記錄為主&#xff0c;如有錯誤請指正&#xff0c;共同學習進步。…

js實現元素根據鼠標滾輪滾動向左右上下滑動著從模糊到清楚顯示出來

html代碼 <div ref{test} id"animatedElement" className"not-animated"> <div style{{width:"100px",height:"50px",backgroundColor:"red"}}> </div> </div> JS代碼 const te…

用智能插件(Fitten Code: Faster and Better AI Assistant)修改好了可以持久保存的vue3留言板

天際 第一修改是選項式&#xff1a; <!-- 模板結構 --> <template><div><textarea placeholder"請輸入備注內容" v-model"newItem"></textarea><button click"addItem">添加</button><hr><…

Vue2+Element 封裝評論+表情功能

有需要的小伙伴直接拿代碼即可&#xff0c;不需要下載依賴&#xff0c;目前是初始版本&#xff0c;后期會進行代碼的優化。 評論組件如下&#xff1a; 創建 comment.vue 文件。 表情組件 VueEmoji.vue 在評論組件中使用。 <template><div class"comment"…

《主對角線求和》

描述 有一個n行n列的二維數組&#xff0c;請你求出二維數組的主對角線上的所有數字的和是多少。 輸入描述 第一行一個整數n&#xff0c;代表下面輸入的是n行n列(2≤n≤10)的二維數組&#xff1b; 接下來n行&#xff0c;每行n列&#xff0c;表示二維數組的每個元素各是多少。 …