91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

介紹下這五種IO模型

Linux閱碼場(chǎng) ? 來(lái)源:Linuxer ? 2020-06-03 15:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

五種IO模型

阻塞IO

非阻塞IO

IO復(fù)用(select和poll)

信號(hào)驅(qū)動(dòng)

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

備注

一個(gè)輸入操作一般分為兩個(gè)階段:

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

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

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

那我們來(lái)分別看下這五種IO模型

阻塞IO模型

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

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

非阻塞IO模型

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

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

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

IO復(fù)用模型

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

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

信號(hào)驅(qū)動(dòng)IO模型

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

異步IO模型

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

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

五種IO模型的對(duì)比

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

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

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

同步IO操作引起請(qǐng)求進(jìn)程阻塞,直到IO操作完成

異步IO操作不引起請(qǐng)求進(jìn)程阻塞

我們可以發(fā)現(xiàn),根據(jù)上面的定義,前四種模式:阻塞IO模型、非阻塞IO模型、IO多路復(fù)用模型和信號(hào)驅(qū)動(dòng)模型,其實(shí)都屬于同步IO模型,因?yàn)樗麄兯膫€(gè)都會(huì)經(jīng)歷真正的IO操作(recvfrom)且阻塞了進(jìn)程,只有異步IO模型與異步IO的定義匹配

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

    關(guān)注

    8

    文章

    7337

    瀏覽量

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

    關(guān)注

    1

    文章

    3757

    瀏覽量

    52130

原文標(biāo)題:這些IO模型你都知道嗎 - 五種常見(jiàn)IO模型介紹

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    三格電子一體式io和分體式io的區(qū)別#

    IO
    jf_68793483
    發(fā)布于 :2026年02月27日 14:15:48

    國(guó)內(nèi)大星地?cái)?shù)據(jù)大模型ai融合分析與應(yīng)用分系統(tǒng)軟件介紹

    ? ? 雖未明確劃分“星地?cái)?shù)據(jù)大模型AI融合分析與應(yīng)用”的大分系統(tǒng),但北京華盛恒輝、北京木恒潤(rùn)、Anthropic、MetaAI和SpaceX等機(jī)構(gòu)已通過(guò)關(guān)鍵技術(shù)突破與場(chǎng)景深耕,構(gòu)建了具有代表性
    的頭像 發(fā)表于 12-29 10:49 ?70次閱讀

    大衛(wèi)星運(yùn)管中心大模型智能決策分系統(tǒng)軟件的應(yīng)用與未來(lái)發(fā)展

    衛(wèi)星運(yùn)管中心大模型智能決策分系統(tǒng)、北京木恒潤(rùn)衛(wèi)星運(yùn)管中心大模型智能決策分系統(tǒng)、洛克希德·馬丁、諾斯羅普·格魯曼及SpaceX等機(jī)構(gòu)在該領(lǐng)域展現(xiàn)出顯著技術(shù)積累與工程實(shí)踐能力。以下為各主體相關(guān)系統(tǒng)的精要
    的頭像 發(fā)表于 12-18 14:58 ?374次閱讀

    大大模型支撐后勤保障方案生成系統(tǒng)軟件的應(yīng)用與未來(lái)發(fā)展

    ? ? 在后勤保障領(lǐng)域,大以大模型或智能技術(shù)為核心支撐的系統(tǒng)方案顯著提升了保障的智能化與效率,包括:北京華盛恒輝與木恒潤(rùn)的大模型驅(qū)動(dòng)方案生成系統(tǒng)、英國(guó)HUMS健康與使用監(jiān)控系統(tǒng)、以
    的頭像 發(fā)表于 12-17 15:24 ?312次閱讀

    浮點(diǎn)擴(kuò)展指令集中定義的舍入模式

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

    遠(yuǎn)程IO不就是分布式IO?其實(shí)很多人都理解錯(cuò)了

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

    GraniStudio:IO寫(xiě)入例程

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

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

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

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

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

    FA模型的DataAbility的切換介紹

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

    FA模型綁定Stage模型ServiceExtensionAbility介紹

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

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

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

    如何使用Docker部署大模型

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

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

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