什么是阻塞和非阻塞?我們就用管道的讀寫來舉例子。
如果沒聽過管道,就把他理解成文件就行。
一個(gè)程序打開管道,并且往管道里面寫入數(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è)程序打開管道,從管道里面讀取數(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打開管道是阻塞的模式,也就是說,如果管道沒有數(shù)據(jù),程序一直停在 read 函數(shù)這里,直到管道里面有數(shù)據(jù),把它讀出來。創(chuàng)建一個(gè)管道,運(yùn)行程序,現(xiàn)象就是這樣的,程序此時(shí)阻塞在 read 函數(shù)。
如果通過寫進(jìn)程往管道里面寫入數(shù)據(jù),read能立馬把數(shù)據(jù)讀出來。
open函數(shù)還給我們提供了非阻塞的模式,加上這個(gè)選項(xiàng),運(yùn)行程序的時(shí)候,即使管道里面沒有數(shù)據(jù),程序也不會(huì)停在 read 函數(shù)上,繼續(xù)向下執(zhí)行。
這兩個(gè)現(xiàn)象,就是阻塞和非阻塞。
最后,放上百科的一段解釋,大家還有什么見解,歡迎在評(píng)論區(qū)交流。
阻塞和非阻塞指的是調(diào)用者(程序)在等待返回結(jié)果(或輸入)時(shí)的狀態(tài)。 阻塞時(shí),在調(diào)用結(jié)果返回前,當(dāng)前線程會(huì)被掛起,并在得到結(jié)果之后返回。 非阻塞時(shí),如果不能立刻得到結(jié)果,則該調(diào)用者不會(huì)阻塞當(dāng)前線程。 因此對(duì)應(yīng)非阻塞的情況,調(diào)用者需要定時(shí)輪詢查看處理狀態(tài)。
審核編輯:劉清
-
阻塞
+關(guān)注
關(guān)注
0文章
24瀏覽量
8379
原文標(biāo)題:什么是阻塞和非阻塞
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Verilog語言中阻塞和非阻塞賦值的不同
Verilog阻塞和非阻塞原理分析
阻塞與非阻塞賦值的區(qū)別是什么?
深入理解阻塞和非阻塞賦值
深入分析verilog阻塞和非阻塞賦值
《Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》第8章、Linux設(shè)備驅(qū)動(dòng)中的阻塞與非阻塞IO
從I/O的阻塞與非阻塞、I/O處理的單線程與多線程角度探討服務(wù)器模型
FPGA的視頻教程之Verilog中阻塞與非阻塞的詳細(xì)資料說明
時(shí)序邏輯中的阻塞和非阻塞
阻塞與非阻塞通信的區(qū)別 阻塞和非阻塞應(yīng)用場(chǎng)景
網(wǎng)絡(luò)IO模型:阻塞與非阻塞

什么是阻塞和非阻塞?
評(píng)論