色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

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

簡(jiǎn)單說一下阻塞IO、非阻塞IO、IO復(fù)用的區(qū)別?

Linux愛好者 ? 來源:Linux愛好者 ? 2024-03-04 15:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

在《Unix網(wǎng)絡(luò)編程》一書中提到了五種IO模型,分別是:阻塞IO、非阻塞IO、IO復(fù)用、信號(hào)驅(qū)動(dòng)IO以及異步IO。本篇文章主要介紹IO的基本概念以及阻塞IO、非阻塞IO、IO復(fù)用三種模型,供大家參考學(xué)習(xí)。

一、什么是IO

計(jì)算機(jī)視角理解IO:

對(duì)于計(jì)算機(jī)而言,任何涉及到計(jì)算機(jī)核心(CPU和內(nèi)存)與其他設(shè)備間的數(shù)據(jù)轉(zhuǎn)移的過程就是IO。IO對(duì)于計(jì)算機(jī)而言有兩層意思:

IO 設(shè)備:比如我們最常見的打印機(jī)、鼠標(biāo)、鍵盤。

對(duì)IO設(shè)備的數(shù)據(jù)讀寫。

程序視角理解IO:

現(xiàn)代操作系統(tǒng)將空間劃分為用戶空間和內(nèi)核空間。

用戶空間:非內(nèi)核應(yīng)用程序則運(yùn)行在用戶空間。用戶空間中的代碼運(yùn)行在較低的特權(quán)級(jí)別上,不能直接訪問內(nèi)核空間和硬件設(shè)備。

內(nèi)核空間:操作系統(tǒng)的核心,是操作系統(tǒng)工作的基礎(chǔ),它負(fù)責(zé)管理系統(tǒng)的進(jìn)程、內(nèi)存、設(shè)備驅(qū)動(dòng)程序、文件和網(wǎng)絡(luò)系統(tǒng),決定著系統(tǒng)的性能和穩(wěn)定性。

569dc566-d9de-11ee-a297-92fbcf53809c.png

操作系統(tǒng)為了能夠正常平穩(wěn)地運(yùn)行下去,它是不會(huì)允許應(yīng)用程序隨意訪問計(jì)算機(jī)硬件部分,如內(nèi)存、硬盤、網(wǎng)卡,應(yīng)用程序必須通過操作系統(tǒng)提供的API來訪問,以達(dá)到安全的訪問控制。

總結(jié):IO對(duì)于應(yīng)用程序而言,強(qiáng)調(diào)的是通過向內(nèi)核發(fā)起系統(tǒng)調(diào)用完成對(duì)I/O的間接訪問。

應(yīng)用程序發(fā)起一次IO訪問分為兩個(gè)階段:

IO調(diào)用階段:應(yīng)用程序向內(nèi)核發(fā)起系統(tǒng)調(diào)用。

IO執(zhí)行階段:內(nèi)核執(zhí)行IO操作并返回。

數(shù)據(jù)準(zhǔn)備階段:內(nèi)核等待IO設(shè)備準(zhǔn)備好數(shù)據(jù)

數(shù)據(jù)拷貝階段:將數(shù)據(jù)從內(nèi)核緩沖區(qū)拷貝到用戶空間緩沖區(qū)

56a516cc-d9de-11ee-a297-92fbcf53809c.png

二、阻塞IO模型

阻塞I/O模型是最常見的IO模型,其流程圖如下所示。

56b1b71a-d9de-11ee-a297-92fbcf53809c.png

應(yīng)用程序發(fā)起一個(gè)系統(tǒng)調(diào)用(recvform),這個(gè)時(shí)候應(yīng)用程序會(huì)一直阻塞下去,直到內(nèi)核把數(shù)據(jù)準(zhǔn)備好,并將其從內(nèi)核復(fù)制到用戶空間,復(fù)制完成后返回成功提示,這個(gè)時(shí)候應(yīng)用程序才會(huì)繼續(xù)處理數(shù)據(jù)。

優(yōu)點(diǎn):模型簡(jiǎn)單,實(shí)現(xiàn)難度低,適用于并發(fā)量較小的應(yīng)用開發(fā)。

缺點(diǎn):IO調(diào)用階段和IO執(zhí)行階段都會(huì)阻塞。

典型的阻塞I/0模型的例子為data=socket.read(),如果內(nèi)核數(shù)據(jù)沒有準(zhǔn)備就緒,Socket線程就會(huì)一直阻塞在read()中等待內(nèi)核數(shù)據(jù)就緒。

生活場(chǎng)景:某天,你跟你女朋友去奶茶店買奶茶,點(diǎn)完奶茶后后,由于你們不知道奶茶什么時(shí)候才能做好,所以你們就只能一直等著,其他什么事情也不能干。

三、非阻塞 IO模型

在非阻塞IO模型中,應(yīng)用進(jìn)程需要不斷詢問內(nèi)核數(shù)據(jù)是否就緒,在內(nèi)核數(shù)據(jù)還未就緒時(shí),應(yīng)用進(jìn)程還可以做其他事情。

56b53cfa-d9de-11ee-a297-92fbcf53809c.png

從上圖可以看出, 非阻塞IO模型需要應(yīng)用進(jìn)程不斷地主動(dòng)詢問內(nèi)核數(shù)據(jù)是否已準(zhǔn)備好了。

優(yōu)點(diǎn):模型簡(jiǎn)單,實(shí)現(xiàn)難度低;與阻塞IO模型對(duì)比,它在等待數(shù)據(jù)報(bào)的過程中,進(jìn)程并沒有阻塞,它可以做其他的事情。

缺點(diǎn):輪詢發(fā)送 recvform,消耗CPU 資源。

生活場(chǎng)景:你和你女朋友去奶茶店買奶茶,吸取了上一次的教訓(xùn),點(diǎn)完奶茶后順便去逛了逛商場(chǎng)。由于你們擔(dān)心會(huì)錯(cuò)過取餐,所以你們就每隔一段時(shí)間就來問下服務(wù)員,你們的奶茶做好了沒有,來來回回好多回,若干次后,終于問到奶茶已經(jīng)準(zhǔn)備好了,然后你們就開心的喝了起來。

四、IO復(fù)用模型

非阻塞IO模型需要進(jìn)程不斷地輪詢發(fā)起recvform系統(tǒng)調(diào)用,就會(huì)有很多的線程不斷調(diào)用recvfrom 請(qǐng)求數(shù)據(jù),先不說服務(wù)器能不能扛得住這么多線程,就算扛得住那么很明顯這種方式是不是太浪費(fèi)資源了,線程是我們操作系統(tǒng)的寶貴資源,大量的線程用來去讀取數(shù)據(jù)了,那么就意味著能做其它事情的線程就會(huì)少。

例如:你是奶茶店的服務(wù)員,每個(gè)人點(diǎn)好奶茶后,每隔幾分鐘就來問你一次好了沒有,隨著問的人越來越多,你可能會(huì)開始懷疑人生。那么有沒有什么好的解決辦法呢?

答案:不需要所有進(jìn)程輪詢來發(fā)起recvform來查詢數(shù)據(jù)是否已經(jīng)準(zhǔn)備好了,而是有人幫忙來詢問,這個(gè)幫忙的人就是select。

IO復(fù)用模型如下所示:

56ca0220-d9de-11ee-a297-92fbcf53809c.png

多個(gè)進(jìn)程的IO注冊(cè)到一個(gè)復(fù)用器(select)上,select 會(huì)監(jiān)聽所有注冊(cè)進(jìn)來的IO。如果內(nèi)核的數(shù)據(jù)報(bào)沒有準(zhǔn)備好,調(diào)用select 的進(jìn)程將會(huì)被阻塞,而當(dāng)任一IO在內(nèi)核緩沖區(qū)中有數(shù)據(jù),select調(diào)用就會(huì)返回可讀條件,然后進(jìn)程再進(jìn)行recvform系統(tǒng)調(diào)用,內(nèi)核將數(shù)據(jù)拷貝到用戶空間,注意這個(gè)過程是阻塞的。

注意:IO 復(fù)用模型在第一個(gè)階段和第二個(gè)階段其實(shí)都有阻塞,第一個(gè)階段阻塞于 select 調(diào)用,第二個(gè)階段阻塞于數(shù)據(jù)復(fù)制。

優(yōu)點(diǎn):適用于高并發(fā)應(yīng)用程序。

缺點(diǎn):模型復(fù)雜,實(shí)現(xiàn)、開發(fā)難度較大。

生活場(chǎng)景:如果每個(gè)人都過一會(huì)就來問一下奶茶好了沒有,奶茶店的壓力也太大了。于是奶茶店想到了一個(gè)辦法,找一個(gè)中間人(select)擋在奶茶店前面,顧客(應(yīng)用進(jìn)程)詢問那個(gè)中間人奶茶好了沒有(對(duì)應(yīng)多個(gè)進(jìn)程的IO注冊(cè)到一個(gè)復(fù)用器(select)上),如果沒有好就讓顧客等待(應(yīng)用進(jìn)程阻塞于 select 調(diào)用)。中間人持續(xù)查看顧客的奶茶是否準(zhǔn)備好,如果有一個(gè)人的奶茶準(zhǔn)備好了就會(huì)去通知那個(gè)人可以取了(而當(dāng)任一IO在內(nèi)核緩沖區(qū)中有數(shù)據(jù),select調(diào)用就會(huì)返回可讀條件,然后進(jìn)程再進(jìn)行recvform系統(tǒng)調(diào)用)。

56cdf966-d9de-11ee-a297-92fbcf53809c.png

總結(jié)

學(xué)習(xí)IO模型時(shí),必須要把每個(gè)模型聯(lián)系起來看,比如阻塞IO模型會(huì)阻塞較長(zhǎng)時(shí)間,而非阻塞IO在等待數(shù)據(jù)報(bào)的過程中,進(jìn)程并沒有阻塞,它可以做其他的事情。IO復(fù)用模型可以很好的降低服務(wù)器的壓力,且在連接數(shù)眾多且消息體不大的情況下有很大的優(yōu)勢(shì)。


審核編輯:劉清

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

    關(guān)注

    19

    文章

    7643

    瀏覽量

    90477
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7122

    瀏覽量

    125269
  • 復(fù)用器
    +關(guān)注

    關(guān)注

    1

    文章

    753

    瀏覽量

    28952

原文標(biāo)題:面試官:簡(jiǎn)單說一下阻塞IO、非阻塞IO、IO復(fù)用的區(qū)別 ?

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    IO與NIO有何區(qū)別

    的是對(duì)基于Socket的網(wǎng)絡(luò)編程提供了阻塞編程模式。 IO NIO 面向流 面向緩沖 阻塞
    的頭像 發(fā)表于 09-25 11:00 ?1136次閱讀
    <b class='flag-5'>IO</b>與NIO有何<b class='flag-5'>區(qū)別</b>

    linuxIO模型詳解

      開門見山,Linux的如中IO模型:阻塞IO模型,阻塞
    發(fā)表于 10-09 16:12

    如何使用普通IO模擬串口實(shí)現(xiàn)阻塞全雙工通訊功能?

    如何使用普通IO模擬串口實(shí)現(xiàn)阻塞全雙工通訊功能?
    發(fā)表于 12-03 06:14

    veriolg中阻塞賦值與阻塞賦值區(qū)別

      在開始學(xué)到阻塞阻塞的時(shí)候,所被告知的兩者的區(qū)別就在于阻塞是串行的,
    發(fā)表于 09-16 09:34 ?4次下載

    《Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》第8章、Linux設(shè)備驅(qū)動(dòng)中的阻塞阻塞IO

    《Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》第8章、Linux設(shè)備驅(qū)動(dòng)中的阻塞阻塞IO
    發(fā)表于 10-27 11:35 ?9次下載
    《Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》第8章、Linux設(shè)備驅(qū)動(dòng)中的<b class='flag-5'>阻塞</b>與<b class='flag-5'>非</b><b class='flag-5'>阻塞</b><b class='flag-5'>IO</b>

    網(wǎng)絡(luò)IO套路分享

    轉(zhuǎn)自:我是程序員小賤-L的存在 1 阻塞阻塞--開胃菜 阻塞 我們知道在調(diào)用某個(gè)函數(shù)的時(shí)候無非就是兩種情況,要么馬上返回,然后根據(jù)返回值進(jìn)行接下來的業(yè)務(wù)處理。當(dāng)在使用
    的頭像 發(fā)表于 10-13 14:52 ?2114次閱讀
    網(wǎng)絡(luò)<b class='flag-5'>IO</b>套路分享

    深入分析同步阻塞網(wǎng)絡(luò)IO的內(nèi)部實(shí)現(xiàn)詳解

    在網(wǎng)絡(luò)開發(fā)模型中,有種非常易于開發(fā)同學(xué)使用的方式,那就是同步阻塞的網(wǎng)絡(luò) IO(在 Java 中習(xí)慣叫 BIO)。
    的頭像 發(fā)表于 04-03 14:10 ?2238次閱讀
    深入分析同步<b class='flag-5'>阻塞</b>網(wǎng)絡(luò)<b class='flag-5'>IO</b>的內(nèi)部實(shí)現(xiàn)詳解

    網(wǎng)絡(luò)IO的弊端以及多路復(fù)用IO的優(yōu)勢(shì)

    為了講多路復(fù)用,當(dāng)然還是要跟風(fēng),采用鞭尸的思路,先講講傳統(tǒng)的網(wǎng)絡(luò) IO 的弊端,用拉踩的方式捧起多路復(fù)用 IO 的優(yōu)勢(shì)。 為了方便理解,以下所有代碼都是偽代碼,知道其表達(dá)的意思即可。
    的頭像 發(fā)表于 08-25 18:01 ?3278次閱讀
    網(wǎng)絡(luò)<b class='flag-5'>IO</b>的弊端以及多路<b class='flag-5'>復(fù)用</b><b class='flag-5'>IO</b>的優(yōu)勢(shì)

    文詳細(xì)了解五種IO模型

    五種IO模型包括:阻塞IO、阻塞IO、IO多路
    的頭像 發(fā)表于 02-14 14:38 ?6172次閱讀
    <b class='flag-5'>一</b>文詳細(xì)了解五種<b class='flag-5'>IO</b>模型

    簡(jiǎn)要敘述分布式IO和遠(yuǎn)程IO區(qū)別

    遠(yuǎn)程IO與分布式IO區(qū)別是什么?讓很多人糊涂,到底什么是遠(yuǎn)程IO,什么是分布式IO,網(wǎng)上包括各種聲音,連行內(nèi)有經(jīng)驗(yàn)的老師們也可能把分布式
    的頭像 發(fā)表于 12-29 11:59 ?1.2w次閱讀
    簡(jiǎn)要敘述分布式<b class='flag-5'>IO</b>和遠(yuǎn)程<b class='flag-5'>IO</b>的<b class='flag-5'>區(qū)別</b>

    文了解阻塞賦值與阻塞賦值

    今天給大家普及一下阻塞賦值和阻塞賦值的相關(guān)知識(shí)
    的頭像 發(fā)表于 07-07 14:15 ?2592次閱讀
    <b class='flag-5'>一</b>文了解<b class='flag-5'>阻塞</b>賦值與<b class='flag-5'>非</b><b class='flag-5'>阻塞</b>賦值

    網(wǎng)絡(luò)IO模型:阻塞阻塞

    阻塞 IO 模型 在Linux ,默認(rèn)情況所有的 socket 都是阻塞的,個(gè)典型的讀操作流程如圖所示。
    的頭像 發(fā)表于 10-08 17:16 ?1205次閱讀
    網(wǎng)絡(luò)<b class='flag-5'>IO</b>模型:<b class='flag-5'>阻塞</b>與<b class='flag-5'>非</b><b class='flag-5'>阻塞</b>

    多路IO復(fù)用模型和異步IO模型介紹

    多路 IO 復(fù)用模型 多路 IO 復(fù)用,有時(shí)也稱為事件驅(qū)動(dòng) IO。它的基本原理就是有個(gè)函數(shù)會(huì)不斷地輪詢所負(fù)責(zé)的所有 socket ,當(dāng)某個(gè)
    的頭像 發(fā)表于 10-08 17:21 ?1074次閱讀
    多路<b class='flag-5'>IO</b><b class='flag-5'>復(fù)用</b>模型和異步<b class='flag-5'>IO</b>模型介紹

    信號(hào)驅(qū)動(dòng)IO與異步IO區(qū)別

    , 是開始處理IO, 這個(gè)時(shí)候還是存在阻塞的,將數(shù)據(jù)從內(nèi)核態(tài)拷貝進(jìn)入到用戶態(tài)的過程至少是阻塞住的 (應(yīng)用程序?qū)?shù)據(jù)從內(nèi)核態(tài)拷貝到用戶態(tài)的過程是阻塞等待的, 和異步
    的頭像 發(fā)表于 11-08 15:32 ?1452次閱讀
    信號(hào)驅(qū)動(dòng)<b class='flag-5'>IO</b>與異步<b class='flag-5'>IO</b>的<b class='flag-5'>區(qū)別</b>

    文解讀Linux 5種IO模型

    Linux里有五種IO模型:阻塞IO、阻塞IO、多路復(fù)用
    的頭像 發(fā)表于 11-09 11:12 ?817次閱讀
    <b class='flag-5'>一</b>文解讀Linux 5種<b class='flag-5'>IO</b>模型
    主站蜘蛛池模板: 国产精品系列在线一区 | 亚洲国产综合另类视频 | 回复术士勇者免费观看全集 | 超碰免费视频公开观看 | 午夜欧洲亚洲AV永久无码精品 | jizz日本女人 | 皮皮在线精品亚洲 | 久久精品综合网中文字幕 | 美目盼兮amy198281 | 亚洲在线成色综合网站 | 成人网视频在线观看免费 | 北条麻妃快播 | 超碰超碰视频在线观看 | 精品亚洲大全 | 精品熟女少妇AV久久免费A片 | 色狠狠色狠狠综合天天 | 国产成人精品综合久久久 | 青青青青久久久久国产的 | 性xxx欧美| black大战chinese周晓琳 | 把英语老师强奷到舒服动态图 | 国外经典三级 | 白丝女仆被啪到深夜漫画 | 国产成人国产在线观看入口 | 伦理片在线3348 | 中俄两军在日本海等上空战略巡航 | 99久久免费热在线精品 | 纯肉高H放荡受BL文库 | 亲爱的妈妈6韩国电影免费观看 | 天美麻豆成人AV精品 | 久久伊人中文字幕有码 | 老女人与小伙子露脸对白 | 亚洲第一成年人网站 | 久久综合久综合久久鬼色 | 乱奷XXXXXHD | 国产自产视频在线观看香蕉 | 7m凹凸国产刺激在线视频 | 光溜溜的美女直播软件 | 日本午夜精品一区二区三区电影 | 擼擼擼麻豆密臀AV | 甜性涩爱快播 |

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品