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)不再提示

什么是阻塞和非阻塞?

學(xué)益得智能硬件 ? 來(lái)源:學(xué)益得智能硬件 ? 2024-03-25 10:04 ? 次閱讀

什么是阻塞和非阻塞?我們就用管道的讀寫(xiě)來(lái)舉例子。

如果沒(méi)聽(tīng)過(guò)管道,就把他理解成文件就行。

一個(gè)程序打開(kāi)管道,并且往管道里面寫(xiě)入數(shù)據(jù);

intmain()
{
intfd=open("fifo",O_WRONLY);
if (-1 == fd)
{
    perror("open");
}

char buf[32] = {0};
scanf("%s", buf);

if (write(fd, buf, strlen(buf)) == -1)
{
    perror("write");
}

    return 0;
}
另一個(gè)程序打開(kāi)管道,從管道里面讀取數(shù)據(jù)。
int main()
{
intfd=open("fifo",O_RDONLY);
    if (-1 == fd)
    {
        perror("open");
    }
    
charbuf[32]={0};
    
    if (read(fd, buf, sizeof(buf)) == -1)
    {
        perror("write");
    }
    
    return 0;
}
默認(rèn)情況下,用open打開(kāi)管道是阻塞的模式,也就是說(shuō),如果管道沒(méi)有數(shù)據(jù),程序一直停在 read 函數(shù)這里,直到管道里面有數(shù)據(jù),把它讀出來(lái)。

創(chuàng)建一個(gè)管道,運(yùn)行程序,現(xiàn)象就是這樣的,程序此時(shí)阻塞在 read 函數(shù)。

如果通過(guò)寫(xiě)進(jìn)程往管道里面寫(xiě)入數(shù)據(jù),read能立馬把數(shù)據(jù)讀出來(lái)。

open函數(shù)還給我們提供了非阻塞的模式,加上這個(gè)選項(xiàng),運(yùn)行程序的時(shí)候,即使管道里面沒(méi)有數(shù)據(jù),程序也不會(huì)停在 read 函數(shù)上,繼續(xù)向下執(zhí)行。

這兩個(gè)現(xiàn)象,就是阻塞和非阻塞。

最后,放上百科的一段解釋?zhuān)蠹疫€有什么見(jiàn)解,歡迎在評(píng)論區(qū)交流。
阻塞和非阻塞指的是調(diào)用者(程序)在等待返回結(jié)果(或輸入)時(shí)的狀態(tài)。
阻塞時(shí),在調(diào)用結(jié)果返回前,當(dāng)前線(xiàn)程會(huì)被掛起,并在得到結(jié)果之后返回。
非阻塞時(shí),如果不能立刻得到結(jié)果,則該調(diào)用者不會(huì)阻塞當(dāng)前線(xiàn)程。
因此對(duì)應(yīng)非阻塞的情況,調(diào)用者需要定時(shí)輪詢(xún)查看處理狀態(tà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)投訴
  • 阻塞
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    8083

原文標(biāo)題:什么是阻塞和非阻塞

文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Verilog語(yǔ)言中阻塞阻塞賦值的不同

    來(lái)源:《Verilog數(shù)字系統(tǒng)設(shè)計(jì)(夏宇聞)》 阻塞阻塞賦值的語(yǔ)言結(jié)構(gòu)是Verilog 語(yǔ)言中最難理解概念之一。甚至有些很有經(jīng)驗(yàn)的Verilog 設(shè)計(jì)工程師也不能完全正確地理解:何時(shí)使用
    的頭像 發(fā)表于 08-17 16:18 ?6325次閱讀

    Verilog阻塞阻塞原理分析

    Verilog阻塞阻塞原理分析在Verilog語(yǔ)言最難弄明白的結(jié)構(gòu)中“阻塞賦值”要算一個(gè)。甚至是一些很有經(jīng)驗(yàn)的工程師也不完全明白“
    發(fā)表于 11-23 12:02

    【分享】Verilog中阻塞阻塞語(yǔ)句

    同了在第一個(gè)clk上升沿到來(lái)時(shí),由于b的值未知,賦給c之后,c也為未知值;緊接著,把a(bǔ)的值給b,由于a的值已經(jīng)給出,所以,結(jié)束之后,a、b的值相同,c為x。綜合之后,生成兩級(jí)移位寄存器。 關(guān)于阻塞
    發(fā)表于 11-03 20:26

    fpga基礎(chǔ)篇(一):阻塞阻塞賦值

    `阻塞阻塞賦值首先從名字上理解,阻塞賦值即賦值沒(méi)完成,后邊的語(yǔ)句將無(wú)法執(zhí)行,阻塞剛好與其相
    發(fā)表于 04-05 09:53

    同步與異步,阻塞阻塞的區(qū)別是什么

    同步與異步,阻塞阻塞的區(qū)別
    發(fā)表于 01-26 06:12

    阻塞阻塞賦值的區(qū)別是什么?

    本文通過(guò)Verilog事件處理機(jī)制,詳細(xì)討論了阻塞阻塞賦值的區(qū)別、聯(lián)系及其應(yīng)用示例。
    發(fā)表于 05-10 06:59

    深入理解阻塞阻塞賦值

    這是一個(gè)很好的學(xué)習(xí)阻塞阻塞的資料,對(duì)于FPGA的學(xué)習(xí)有很大幫助。
    發(fā)表于 04-22 11:00 ?11次下載

    深入分析verilog阻塞阻塞賦值

    學(xué)verilog 一個(gè)月了,在開(kāi)發(fā)板上面寫(xiě)了很多代碼,但是始終對(duì)一些問(wèn)題理解的不夠透徹,這里我們來(lái)寫(xiě)幾個(gè)例子仿真出阻塞阻塞的區(qū)別
    發(fā)表于 02-11 03:23 ?1348次閱讀

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

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

    從I/O的阻塞阻塞、I/O處理的單線(xiàn)程與多線(xiàn)程角度探討服務(wù)器模型

    這里探討的服務(wù)器模型主要指的是服務(wù)器端對(duì)I/O的處理模型。從不同維度可以有不同的分類(lèi),這里從I/O的阻塞阻塞、I/O處理的單線(xiàn)程與多線(xiàn)程角度探討服務(wù)器模型。
    的頭像 發(fā)表于 01-08 16:13 ?6959次閱讀

    FPGA的視頻教程之Verilog中阻塞阻塞的詳細(xì)資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是FPGA的視頻教程之Verilog中阻塞阻塞的詳細(xì)資料說(shuō)明。
    發(fā)表于 03-26 17:16 ?2次下載
    FPGA的視頻教程之Verilog中<b class='flag-5'>阻塞</b>與<b class='flag-5'>非</b><b class='flag-5'>阻塞</b>的詳細(xì)資料說(shuō)明

    時(shí)序邏輯中的阻塞阻塞

    Verilog HDL的賦值語(yǔ)句分為阻塞賦值和阻塞賦值兩種。阻塞賦值是指在當(dāng)前賦值完成前阻塞其他類(lèi)型的賦值任務(wù),
    的頭像 發(fā)表于 03-15 13:53 ?2954次閱讀

    阻塞阻塞通信的區(qū)別 阻塞阻塞應(yīng)用場(chǎng)景

    阻塞通信(Blocking Communication):當(dāng)進(jìn)行阻塞通信時(shí),調(diào)用者在發(fā)起一個(gè)I/O操作后會(huì)被阻塞,直到該操作完成返回才能繼續(xù)執(zhí)行后續(xù)代碼。
    的頭像 發(fā)表于 06-15 17:32 ?5869次閱讀

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

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

    socket編程中的阻塞阻塞

    在網(wǎng)絡(luò)編程中, socket 是一個(gè)非常重要的概念,它提供了一個(gè)抽象層,使得開(kāi)發(fā)者可以不必關(guān)心底層的網(wǎng)絡(luò)通信細(xì)節(jié)。 socket 編程中的阻塞阻塞模式是兩種不同的操作方式,它們對(duì)程序的響應(yīng)性
    的頭像 發(fā)表于 11-01 16:13 ?101次閱讀