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

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

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

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

POSIX對(duì)同步、異步I/O的定義

Linux愛(ài)好者 ? 來(lái)源:lq ? 2019-04-27 18:19 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一. POSIX對(duì)同步、異步I/O的定義

我們先大致看看POSIX對(duì)同步、異步的定義,不用細(xì)究,重點(diǎn)看我標(biāo)紅的部分就行。

同步I/O會(huì)導(dǎo)致請(qǐng)求進(jìn)程阻塞,直到I/O操作完成;

異步I/O不會(huì)導(dǎo)致請(qǐng)求進(jìn)程阻塞。

二. 同步、異步,阻塞、非阻塞

個(gè)人理解同步與否與阻塞與否只是看待問(wèn)題的不同維度,不用過(guò)于追究同步和阻塞有什么區(qū)別、以及異步和非阻塞有什么區(qū)別。

我用小明購(gòu)買(mǎi)火車(chē)票的例子大致先講述下同步、異步,阻塞、非阻塞這幾種情況的組合。

同步阻塞,小明去火車(chē)站買(mǎi)票。首先,他需要在某一個(gè)售票窗口排隊(duì),當(dāng)輪到他買(mǎi)票時(shí),他需要告訴售票員他需要一張去上海的火車(chē)票,然后售票員需要去系統(tǒng)查詢(xún)是否還有余票,有的話再收款出票,最后再把票給小明。在火車(chē)票到手之前,小明都不能做其他的事情,這種情況我們可以理解為阻塞。

同步非阻塞,小明委托黃牛幫忙買(mǎi)火車(chē)票,然后小明可以做其他事情,但是需要每隔10分鐘就打電話去詢(xún)問(wèn)黃牛票是否買(mǎi)到。黃牛買(mǎi)到票后,打電話通知小明說(shuō)票已經(jīng)買(mǎi)到,小明再去黃牛那里取火車(chē)票。這里的非阻塞指的是黃牛在買(mǎi)票的過(guò)程中,小明是不用等待的,他可以做其他事情,只是需不時(shí)地去詢(xún)問(wèn)黃牛票是否買(mǎi)好。但是,在小明去黃牛那里取票的過(guò)程中,小明還是不能做其他事情。

異步阻塞,基本上沒(méi)有這個(gè)說(shuō)法。

異步非阻塞,小明委托黃牛幫忙買(mǎi)火車(chē)票,然后小明可以做其他事情,黃牛買(mǎi)好票后會(huì)自動(dòng)把票送到小明的家里。在這整個(gè)過(guò)程中,小明都可以做他自己想做的事情,不會(huì)被阻塞。

三. Unix中的I/O模型

OK,有了上面的基礎(chǔ)過(guò)后,我們可以開(kāi)始講I/O模型了。

在網(wǎng)絡(luò)Socket的輸入操作中,I/O大致可以分為兩個(gè)階段,這個(gè)兩個(gè)階段大家務(wù)必掌握:

數(shù)據(jù)從網(wǎng)絡(luò)中抵達(dá),然后數(shù)據(jù)被復(fù)制到系統(tǒng)內(nèi)核的緩沖區(qū);

系統(tǒng)內(nèi)核將內(nèi)核緩沖區(qū)中的數(shù)據(jù)復(fù)制到用戶(hù)進(jìn)程的緩沖區(qū)中。

在Unix中有5種I/O模型,它們是:

阻塞式I/O

非阻塞式I/O

多路復(fù)用I/O

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

異步I/O

下面,我們逐一分析每種I/O模型。

1.阻塞式I/O

阻塞式I/O,即Blocking I/O。用戶(hù)發(fā)起一個(gè)recvfrom系統(tǒng)調(diào)用,內(nèi)核會(huì)等待數(shù)據(jù)從網(wǎng)絡(luò)中到達(dá)。一旦數(shù)據(jù)準(zhǔn)備就緒,系統(tǒng)內(nèi)核將把自己的緩沖區(qū)中的數(shù)據(jù)拷貝到用戶(hù)進(jìn)程的緩沖區(qū)。在系統(tǒng)內(nèi)核等待數(shù)據(jù)、復(fù)制數(shù)據(jù)的過(guò)程中,用戶(hù)進(jìn)程是不能做其他任何事情的,只能等待內(nèi)核完成上述一系列的操作。

2.非阻塞式I/O

與阻塞式I/O不同,非阻塞式I/O中,用戶(hù)進(jìn)程在發(fā)起recvfrom系統(tǒng)調(diào)用后可以立即返回,但是用戶(hù)進(jìn)程需要不時(shí)地循環(huán)詢(xún)問(wèn)系統(tǒng)內(nèi)核數(shù)據(jù)是否已經(jīng)準(zhǔn)備就緒,即輪詢(xún)(polling)。輪詢(xún)往往會(huì)消耗大量的CPU時(shí)間。

下圖中,用戶(hù)進(jìn)程發(fā)起recvfrom系統(tǒng)調(diào)用,由于系統(tǒng)內(nèi)核中數(shù)據(jù)尚未就緒,內(nèi)核會(huì)立即返回EWOULDBLOCK錯(cuò)誤碼,防止用戶(hù)進(jìn)程阻塞。如此往復(fù),直到系統(tǒng)內(nèi)核中數(shù)據(jù)準(zhǔn)備就緒。在數(shù)據(jù)就緒前,用戶(hù)進(jìn)程是非阻塞的,這也就是為什么這種模型叫非阻塞式I/O的原因。數(shù)據(jù)就緒后,和阻塞式I/O一樣,內(nèi)核將數(shù)據(jù)拷貝至用戶(hù)進(jìn)程,在數(shù)據(jù)拷貝的過(guò)程中,用戶(hù)進(jìn)程是阻塞的。

3.多路復(fù)用I/O

多路復(fù)用I/O的關(guān)鍵函數(shù)為select或者poll。我們以select函數(shù)為例,當(dāng)我們調(diào)用該函數(shù)時(shí),用戶(hù)進(jìn)程將阻塞,直到系統(tǒng)內(nèi)核中的數(shù)據(jù)準(zhǔn)備好。數(shù)據(jù)就緒后,系統(tǒng)會(huì)通知用戶(hù)進(jìn)程數(shù)據(jù)已經(jīng)可讀,然后用戶(hù)進(jìn)程會(huì)發(fā)起recvfrom系統(tǒng)調(diào)用,將數(shù)據(jù)從內(nèi)核拷貝到用戶(hù)進(jìn)程,在數(shù)據(jù)拷貝期間,用戶(hù)進(jìn)程是阻塞的。

使用多路復(fù)用的優(yōu)勢(shì)是我們可以等待多個(gè)描述符就緒,對(duì)應(yīng)到Java NIO多路復(fù)用模型中就是我們可以使用一個(gè)線程監(jiān)聽(tīng)多個(gè)Channel的請(qǐng)求。

4.信號(hào)驅(qū)動(dòng)I/O

信號(hào)驅(qū)動(dòng)I/O模型主要是讓內(nèi)核在描述符就緒的時(shí)候發(fā)送SIGIO信號(hào)通知用戶(hù)進(jìn)程,據(jù)我的了解,這種I/O模式運(yùn)用的并不多,這里就不多描述,直接看圖吧。

5.異步I/O

用戶(hù)進(jìn)程在調(diào)用異步I/O函數(shù)后會(huì)立即返回,并且會(huì)讓內(nèi)核在完成所有操作后通知用戶(hù)進(jìn)程。在內(nèi)核進(jìn)行I/O操作的期間,我們的用戶(hù)進(jìn)程不會(huì)阻塞。特別需要注意的是,和前面四中I/O模型不同,異步I/O模型在內(nèi)核將數(shù)據(jù)拷貝到用戶(hù)進(jìn)程時(shí),我們的用戶(hù)進(jìn)程不會(huì)阻塞。

四. I/O模型對(duì)比

對(duì)比上述5中I/O模型我們可以發(fā)現(xiàn),前面4種模型的區(qū)別主要在第一階段,而第二階段都是一樣的,即將數(shù)據(jù)從內(nèi)核拷貝到用戶(hù)進(jìn)程時(shí)都會(huì)阻塞。根據(jù)POSIX對(duì)同步、異步I/O的定義,可以得出前4種模型都屬于同步I/O。而第5種I/O,即異步I/O,兩個(gè)階段的操作都是由系統(tǒng)內(nèi)核來(lái)處理的,用戶(hù)進(jìn)程并沒(méi)有介入。

聲明:本文內(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)投訴
  • 網(wǎng)絡(luò)
    +關(guān)注

    關(guān)注

    14

    文章

    8265

    瀏覽量

    94719
  • UNIX
    +關(guān)注

    關(guān)注

    0

    文章

    296

    瀏覽量

    43044
  • Posix
    +關(guān)注

    關(guān)注

    0

    文章

    36

    瀏覽量

    10106

原文標(biāo)題:Unix 中的 I/O 模型

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    i.MX6ULL】驅(qū)動(dòng)開(kāi)發(fā)9——Linux I/O模型分析并進(jìn)來(lái)類(lèi)比

    本篇介紹了Linux中的五種I/O模型:阻塞式I/O模型、非阻塞式I/O模型、
    的頭像 發(fā)表于 05-26 09:05 ?3128次閱讀
    【<b class='flag-5'>i</b>.MX6ULL】驅(qū)動(dòng)開(kāi)發(fā)9——Linux <b class='flag-5'>I</b>/<b class='flag-5'>O</b>模型分析并進(jìn)來(lái)類(lèi)比

    飛凌嵌入式ElfBoard-文件I/O的深入學(xué)習(xí)之異步I/O

    I/O多路復(fù)用中,進(jìn)程通過(guò)系統(tǒng)調(diào)用select或poll來(lái)主動(dòng)查詢(xún)文件描述符上是否可以執(zhí)行I/O操作。而在異步
    發(fā)表于 12-05 11:23

    Linux設(shè)備驅(qū)動(dòng)中的異步通知與異步I/O

    ;信號(hào)驅(qū)動(dòng)的異步I/O"。Linux信號(hào)Linux系統(tǒng)中,異步通知使用信號(hào)來(lái)實(shí)現(xiàn)。信號(hào)也就是一種軟件中斷。信號(hào)的產(chǎn)生:kill raise alarm用戶(hù)按下某些終端鍵;硬件異常;終止
    發(fā)表于 02-21 10:52

    測(cè)試serialX的posix支持詳解

    Interface) layer” 子菜單項(xiàng),選擇“Enable POSIX file system and I/O”“Enable I/O
    發(fā)表于 02-14 11:29

    冗余I/O

    6.1 冗余I/O定義當(dāng)I/O模塊以每?jī)蓚€(gè)一組組態(tài)成冗余對(duì)運(yùn)行時(shí),I/
    發(fā)表于 07-23 00:29 ?26次下載

    Java I/O 的相關(guān)方法分析

    (select and poll),signal driven I/O (SIGIO),asynchronous I/O (the POSIX
    發(fā)表于 09-27 13:18 ?0次下載
    Java <b class='flag-5'>I</b>/<b class='flag-5'>O</b> 的相關(guān)方法分析

    posix是什么

    POSIX表示可移植操作系統(tǒng)接口,POSIX標(biāo)準(zhǔn)定義了操作系統(tǒng)應(yīng)該為應(yīng)用程序提供的接口標(biāo)準(zhǔn),是IEEE為要在各種UNIX操作系統(tǒng)上運(yùn)行的軟件而定義的一系列API標(biāo)準(zhǔn)的總稱(chēng),其正式稱(chēng)呼為
    發(fā)表于 11-14 15:09 ?1.1w次閱讀
    <b class='flag-5'>posix</b>是什么

    異步傳輸和同步傳輸?shù)膮^(qū)別介紹

    本文開(kāi)始對(duì)異步傳輸進(jìn)行了介紹,其中包括了異步傳輸工作原理和異步傳輸模式,其次介紹了同步傳輸?shù)?b class='flag-5'>定義和特點(diǎn),最后詳細(xì)介紹了
    發(fā)表于 03-02 14:09 ?1.1w次閱讀
    <b class='flag-5'>異步</b>傳輸和<b class='flag-5'>同步</b>傳輸?shù)膮^(qū)別介紹

    執(zhí)行和理解I/O特征分析

    Learn about tools available for understanding I/O patterns. Understand output in context
    的頭像 發(fā)表于 10-26 06:10 ?2382次閱讀

    同步復(fù)位和異步復(fù)位電路簡(jiǎn)介

    同步復(fù)位和異步復(fù)位都是狀態(tài)機(jī)的常用復(fù)位機(jī)制,圖1中的復(fù)位電路結(jié)合了各自的優(yōu)點(diǎn)。同步復(fù)位具有時(shí)鐘和復(fù)位信號(hào)之間同步的優(yōu)點(diǎn),這可以防止時(shí)鐘和復(fù)位信號(hào)之間發(fā)生競(jìng)爭(zhēng)條件。但是,
    的頭像 發(fā)表于 08-12 15:20 ?8431次閱讀
    <b class='flag-5'>同步</b>復(fù)位和<b class='flag-5'>異步</b>復(fù)位電路簡(jiǎn)介

    2022 RT-Thread全球技術(shù)大會(huì):POSIX如何定義各種功能

    POSIX如何定義各種功能?有哪些標(biāo)準(zhǔn)?
    的頭像 發(fā)表于 05-27 16:42 ?1013次閱讀
    2022 RT-Thread全球技術(shù)大會(huì):<b class='flag-5'>POSIX</b>如何<b class='flag-5'>定義</b>各種功能

    XPHY I/O同步接口應(yīng)用說(shuō)明

    電子發(fā)燒友網(wǎng)站提供《XPHY I/O同步接口應(yīng)用說(shuō)明.pdf》資料免費(fèi)下載
    發(fā)表于 09-13 14:46 ?0次下載
    XPHY <b class='flag-5'>I</b>/<b class='flag-5'>O</b>源<b class='flag-5'>同步</b>接口應(yīng)用說(shuō)明

    同步異步通信協(xié)議介紹

    同步異步傳輸歸結(jié)為時(shí)鐘是外部的(同步)還是內(nèi)部的(異步)。異步協(xié)議的一些例子包括UART、USB、CAN和以太網(wǎng)。
    發(fā)表于 11-27 15:39 ?2738次閱讀
    <b class='flag-5'>同步</b>和<b class='flag-5'>異步</b>通信協(xié)議介紹

    異步電路和同步電路區(qū)別在哪?

    部分是獨(dú)立運(yùn)行的,沒(méi)有明確定義的時(shí)鐘信號(hào)來(lái)同步它們的操作。相反,每個(gè)部分在滿(mǎn)足特定的條件下單獨(dú)啟動(dòng)和運(yùn)行,通過(guò)相互之間的通信來(lái)完成所需的協(xié)作。異步電路通常采用握手協(xié)議來(lái)確保數(shù)據(jù)的正確傳輸,即在發(fā)送方發(fā)送數(shù)據(jù)
    的頭像 發(fā)表于 12-07 10:53 ?5477次閱讀

    I/O接口與I/O端口的區(qū)別

    在計(jì)算機(jī)系統(tǒng)中,I/O接口與I/O端口是實(shí)現(xiàn)CPU與外部設(shè)備數(shù)據(jù)交換的關(guān)鍵組件,它們?cè)诠δ?、結(jié)構(gòu)、作用及運(yùn)作機(jī)制上均存在顯著差異,卻又相互協(xié)同工作,共同構(gòu)建起CPU與外部設(shè)備之間的橋梁
    的頭像 發(fā)表于 02-02 16:00 ?3591次閱讀