国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

介紹下這五種IO模型

Linux閱碼場 ? 來源:Linuxer ? 2020-06-03 15:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

面試的時候也許你被問到過IO模型,可能你知道有五種,可是卻不一定能準確指出他們之間的關系,下面我們介紹下這五種IO模型

五種IO模型

阻塞IO

非阻塞IO

IO復用(select和poll)

信號驅動

異步IO(Posix.1 的 aio...系列函數)

備注

一個輸入操作一般分為兩個階段:

等待數據準備好

把數據從內核拷貝到進程

一個套接字的輸入操作,第一步是等待數據到達網絡,當分組到達時,它被拷貝到內核中的某個緩沖區,第二步是將數據從內核緩沖區拷貝到應用緩沖區

那我們來分別看下這五種IO模型

阻塞IO模型

阻塞IO是最通用的IO模型,使用該模型接收數據時,在數據沒有到之前程序會一直等待。例如函數recvfrom,內核會一直阻塞該請求直到有數據到才返回,如下圖所示:

如上圖所示,進程在調用recvfrom時,該系統調用直到數據到達且拷貝到應用緩沖區或出錯才返回。那阻塞的時間就是從調用recvfrom開始到返回的這段時間,當進程返回成功指示時,應用進程開始處理數據報。

非阻塞IO模型

當把套接字設置成非阻塞方式時,即通知內核:當請求的IO操作非得讓進程睡眠不能完成時,不要讓進程睡眠,而應返回一個錯誤,直到數據準備好,并將數據拷貝到應用緩沖區返回成功指示,進程調用結束。如下圖所示:

從圖中我們可以看出,進程會反復調用recvfrom,前三次調用一直沒有數據返回,因此立即返回一個EWOULDBLOCK錯誤,在第四次調用的時候,數據才準備好,并拷貝到了應用緩沖區,recvfrom返回成功指示,然后就時進程處理數據

當一個應用進程像這樣對一個非阻塞描述字循環調用recvfrom時,我們稱之為輪訓。應用進程連續不斷的查詢內核,驗證某操作是否準備好,這樣會極大的浪費CPU的時間

IO復用模型

IO復用模型支持調用select或poll,會阻塞在select或poll上,而不是阻塞于真正的IO系統調用。阻塞在select調用,等待數據報套接口可讀。當select返回套接口可讀條件時,再調用recvfrom將數據拷貝到應用緩沖區。如下入所示:

通過阻塞IO模型和IO復用模型的對比,我們發現由之前的一次系統調用變成了兩次系統調用,好像變差了,其實并沒有,select可以等待多個描述字準備好,同時select可以設置超時時間。

信號驅動IO模型

信號驅動IO是讓內核在描述字準備好時用信號SIGIO通知我們。首先允許套接口進行信號驅動IO,然后通過系統調用sigacation安裝信號處理程序。此系統調用立即返回,進程繼續工作,是非阻塞的。當數據報準備好被讀時,為該進程生成一個SIGIO信號,隨后在信號處理程序中調用recvfrom讀取數據報,并通知主循環數據已經準備好被處理或者通知主循環讓它來讀取數據報,如下圖所示:

異步IO模型

異步IO讓內核啟動操作,并在整個操作完成后(包括將數據從內核拷貝到用戶空間)通知我們。如下圖所示:

異步IO模型和信號驅動IO模型的主要區別是:信號驅動IO是由內核通知我們何時啟動IO操作,而異步IO是由內核通知我們IO操作何時完成

五種IO模型的對比

通過上面對五種IO模型的介紹,我們發現前四種IO模型的主要區別點在于第一階段,第二階段基本相同:在數據從內核拷貝到調用者的緩沖區時,進程阻塞在recvfrom調用。異步IO模型的兩個階段是和前四種不同的,對比如下圖所示:

我們發現五種IO模型沒有提到同步IO模型,卻提到了異步IO模型,這是為什么?

首先我們看下Posix對同步IO和異步IO的定義:

同步IO操作引起請求進程阻塞,直到IO操作完成

異步IO操作不引起請求進程阻塞

我們可以發現,根據上面的定義,前四種模式:阻塞IO模型、非阻塞IO模型、IO多路復用模型和信號驅動模型,其實都屬于同步IO模型,因為他們四個都會經歷真正的IO操作(recvfrom)且阻塞了進程,只有異步IO模型與異步IO的定義匹配

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7335

    瀏覽量

    94786
  • 模型
    +關注

    關注

    1

    文章

    3752

    瀏覽量

    52113

原文標題:這些IO模型你都知道嗎 - 五種常見IO模型介紹

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    三格電子一體式io和分體式io的區別#

    IO
    jf_68793483
    發布于 :2026年02月27日 14:15:48

    國內大星地數據大模型ai融合分析與應用分系統軟件介紹

    ? ? 雖未明確劃分“星地數據大模型AI融合分析與應用”的大分系統,但北京華盛恒輝、北京木恒潤、Anthropic、MetaAI和SpaceX等機構已通過關鍵技術突破與場景深耕,構建了具有代表性
    的頭像 發表于 12-29 10:49 ?63次閱讀

    大衛星運管中心大模型智能決策分系統軟件的應用與未來發展

    衛星運管中心大模型智能決策分系統、北京木恒潤衛星運管中心大模型智能決策分系統、洛克希德·馬丁、諾斯羅普·格魯曼及SpaceX等機構在該領域展現出顯著技術積累與工程實踐能力。以下為各主體相關系統的精要
    的頭像 發表于 12-18 14:58 ?354次閱讀

    大大模型支撐后勤保障方案生成系統軟件的應用與未來發展

    ? ? 在后勤保障領域,大以大模型或智能技術為核心支撐的系統方案顯著提升了保障的智能化與效率,包括:北京華盛恒輝與木恒潤的大模型驅動方案生成系統、英國HUMS健康與使用監控系統、以
    的頭像 發表于 12-17 15:24 ?305次閱讀

    浮點擴展指令集中定義的舍入模式

    本文主要描述浮點擴展指令集中定義的舍入模式,并介紹一些實現時要注意的地方。 舍入模式介紹 首先,在riscv-spec-v2.2的浮點指令集擴展部分一共定義了
    發表于 10-24 10:25

    遠程IO不就是分布式IO?其實很多人都理解錯了

    一、引言 在工業自動化和控制系統中,分布式io和遠程io作為兩常見的IO技術,各自具有獨特的特點和優勢,以下對遠程io和分布式
    的頭像 發表于 09-28 11:06 ?733次閱讀
    遠程<b class='flag-5'>IO</b>不就是分布式<b class='flag-5'>IO</b>?其實很多人都理解錯了

    GraniStudio:IO寫入例程

    1.文件運行 導入工程 雙擊運行桌面GraniStudio.exe。 通過引導界面導入IO寫入例程,點擊導入按鈕。 打開IO寫入例程所在路徑,選中IO寫入.gsp文件,點擊打開,完成導入。 2.功能
    的頭像 發表于 08-22 16:47 ?771次閱讀
    GraniStudio:<b class='flag-5'>IO</b>寫入例程

    干貨分享 | TSMaster IO功能使用指南—基于同星帶IO設備的配置與操作步驟

    IO模塊是一用于連接計算機系統或控制系統與外部設備之間的接口模塊。數字IO模塊用于處理二進制信號的輸入和輸出,它們可以接收和發送數字信號,通常用于控制邏輯開關、觸發器和其他數字設備。模擬IO
    的頭像 發表于 08-09 20:04 ?1066次閱讀
    干貨分享 | TSMaster <b class='flag-5'>IO</b>功能使用指南—基于同星帶<b class='flag-5'>IO</b>設備的配置與操作步驟

    IO數采終端哪個好用?有什么推薦?

    對生產過程的實時監控和智能管理。市場上IO數采終端產品眾多,以下是個值得推薦的品牌(排名不分先后): 1、物通博聯:在工業物聯網領域表現出色。其IO數采終端協議兼容性強,支持Modbus、OPCUA等上百
    的頭像 發表于 08-07 14:53 ?1035次閱讀
    <b class='flag-5'>IO</b>數采終端哪個好用?有什么推薦?

    FA模型的DataAbility的切換介紹

    ,Stage模型的DataShareExtensionAbility為系統API,只有系統應用才可以創建。因此,FA模型的DataAbility的切換,對于系統應用和三方應用策略有所不同。下面分別
    發表于 06-06 08:10

    FA模型的ServiceAbility的切換介紹

    的ServiceExtensionAbility為系統API,只有系統應用才可以創建。因此,FA模型的ServiceAbility的切換,對于系統應用和三方應用策略有所不同。下面分別介紹這兩場景。 系統
    發表于 06-05 07:24

    FA模型綁定Stage模型ServiceExtensionAbility介紹

    FA模型綁定Stage模型ServiceExtensionAbility 本文介紹FA模型的三應用組件如何綁定Stage
    發表于 06-04 07:55

    如何將一個FA模型開發的聲明式范式應用切換到Stage模型

    模型切換概述 本文介紹如何將一個FA模型開發的聲明式范式應用切換到Stage模型,您需要完成如下動作: 工程切換:新建一個Stage模型
    發表于 06-04 06:22

    如何使用Docker部署大模型

    隨著深度學習和大模型的快速發展,如何高效地部署這些模型成為了一個重要的挑戰。Docker 作為一輕量級的容器化技術,能夠將模型及其依賴環境打包成一個可移植的容器,極大地簡化了部署流程
    的頭像 發表于 05-24 16:39 ?1120次閱讀

    KaihongOS操作系統FA模型與Stage模型介紹

    FA模型與Stage模型介紹 KaihongOS操作系統中,FA模型(Feature Ability)和Stage模型是兩
    發表于 04-24 07:27