chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內(nèi)不再提示

介紹下這五種IO模型

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

掃碼添加小助手

加入工程師交流群

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

五種IO模型

阻塞IO

非阻塞IO

IO復用(select和poll)

信號驅(qū)動

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

備注

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

等待數(shù)據(jù)準備好

把數(shù)據(jù)從內(nèi)核拷貝到進程

一個套接字的輸入操作,第一步是等待數(shù)據(jù)到達網(wǎng)絡(luò),當分組到達時,它被拷貝到內(nèi)核中的某個緩沖區(qū),第二步是將數(shù)據(jù)從內(nèi)核緩沖區(qū)拷貝到應(yīng)用緩沖區(qū)

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

阻塞IO模型

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

如上圖所示,進程在調(diào)用recvfrom時,該系統(tǒng)調(diào)用直到數(shù)據(jù)到達且拷貝到應(yīng)用緩沖區(qū)或出錯才返回。那阻塞的時間就是從調(diào)用recvfrom開始到返回的這段時間,當進程返回成功指示時,應(yīng)用進程開始處理數(shù)據(jù)報。

非阻塞IO模型

當把套接字設(shè)置成非阻塞方式時,即通知內(nèi)核:當請求的IO操作非得讓進程睡眠不能完成時,不要讓進程睡眠,而應(yīng)返回一個錯誤,直到數(shù)據(jù)準備好,并將數(shù)據(jù)拷貝到應(yīng)用緩沖區(qū)返回成功指示,進程調(diào)用結(jié)束。如下圖所示:

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

當一個應(yīng)用進程像這樣對一個非阻塞描述字循環(huán)調(diào)用recvfrom時,我們稱之為輪訓。應(yīng)用進程連續(xù)不斷的查詢內(nèi)核,驗證某操作是否準備好,這樣會極大的浪費CPU的時間

IO復用模型

IO復用模型支持調(diào)用select或poll,會阻塞在select或poll上,而不是阻塞于真正的IO系統(tǒng)調(diào)用。阻塞在select調(diào)用,等待數(shù)據(jù)報套接口可讀。當select返回套接口可讀條件時,再調(diào)用recvfrom將數(shù)據(jù)拷貝到應(yīng)用緩沖區(qū)。如下入所示:

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

信號驅(qū)動IO模型

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

異步IO模型

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

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

五種IO模型的對比

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

我們發(fā)現(xiàn)五種IO模型沒有提到同步IO模型,卻提到了異步IO模型,這是為什么?

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

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

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7314

    瀏覽量

    93919
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3645

    瀏覽量

    51685

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

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

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

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

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

    GraniStudio:IO寫入例程

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

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

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

    IO數(shù)采終端哪個好用?有什么推薦?

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

    FA模型的DataAbility的切換介紹

    ,Stage模型的DataShareExtensionAbility為系統(tǒng)API,只有系統(tǒng)應(yīng)用才可以創(chuàng)建。因此,F(xiàn)A模型的DataAbility的切換,對于系統(tǒng)應(yīng)用和三方應(yīng)用策略有所不同。下面分別
    發(fā)表于 06-06 08:10

    FA模型的ServiceAbility的切換介紹

    的ServiceExtensionAbility為系統(tǒng)API,只有系統(tǒng)應(yīng)用才可以創(chuàng)建。因此,F(xiàn)A模型的ServiceAbility的切換,對于系統(tǒng)應(yīng)用和三方應(yīng)用策略有所不同。下面分別介紹這兩場景。 系統(tǒng)
    發(fā)表于 06-05 07:24

    FA模型綁定Stage模型ServiceExtensionAbility介紹

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

    如何將一個FA模型開發(fā)的聲明式范式應(yīng)用切換到Stage模型

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

    如何使用Docker部署大模型

    隨著深度學習和大模型的快速發(fā)展,如何高效地部署這些模型成為了一個重要的挑戰(zhàn)。Docker 作為一輕量級的容器化技術(shù),能夠?qū)?b class='flag-5'>模型及其依賴環(huán)境打包成一個可移植的容器,極大地簡化了部署流程
    的頭像 發(fā)表于 05-24 16:39 ?773次閱讀

    KaihongOS操作系統(tǒng)FA模型與Stage模型介紹

    FA模型與Stage模型介紹 KaihongOS操作系統(tǒng)中,F(xiàn)A模型(Feature Ability)和Stage模型是兩
    發(fā)表于 04-24 07:27

    宜科電子全新IO-Link信號集線器助力工業(yè)自動化升級

    工業(yè)4.0浪潮,設(shè)備之間的“高效對話”成為智能工廠的核心競爭力。IO-Link作為一可實現(xiàn)從控制器到自動化最底層級之間的IO通信技術(shù),通過IO
    的頭像 發(fā)表于 04-11 15:44 ?890次閱讀

    介紹超耐高溫工程塑料

    前言工程塑料是一類具有優(yōu)異性能的高分子材料,在許多領(lǐng)域都有廣泛的應(yīng)用。其中,超耐高溫工程塑料更是因其出色的耐高溫特性而備受關(guān)注。下面為大家介紹超耐高溫工程塑料。 聚苯硫醚(PPS) 聚苯硫醚
    的頭像 發(fā)表于 01-15 11:22 ?2841次閱讀

    一文理解多模態(tài)大語言模型——

    /understanding-multimodal-llms ? 《一文理解多模態(tài)大語言模型 - 上》介紹了什么是多模態(tài)大語言模型,以及構(gòu)建多模態(tài) LLM 有兩主要方式之一:統(tǒng)一嵌入
    的頭像 發(fā)表于 12-03 15:18 ?972次閱讀
    一文理解多模態(tài)大語言<b class='flag-5'>模型</b>——<b class='flag-5'>下</b>

    λ-IO:存儲計算下的IO棧設(shè)計

    動機和背景? ? 存儲計算存儲資源的充分利用。IO棧是管理存儲器的的基本組件,包括設(shè)備驅(qū)動、塊接口層、文件系統(tǒng),目前一些用戶空間IO庫(如SPDK)有效降低了延遲,但是io棧仍然不可或缺。這是因為1
    的頭像 發(fā)表于 12-02 10:35 ?942次閱讀
    λ-<b class='flag-5'>IO</b>:存儲計算下的<b class='flag-5'>IO</b>棧設(shè)計