阻塞和非阻塞系統呼叫

2021-06-08 06:34:29 字數 602 閱讀 8036

阻塞

阻塞呼叫是指呼叫結果返回之前,當前執行緒會被掛起。函式只有在得到結果之後才會返回。有人也許會把阻塞呼叫和同步呼叫等同起來,實際上他是不同的。對於同步呼叫來說,很多時候當前執行緒還是啟用的,只是從邏輯上當前函式沒有返回而已。例如,我們在csocket中呼叫receive函式,如果緩衝區中沒有資料,這個函式就會一直等待,直到有資料才返回。而此時,當前執行緒還會繼續處理各種各樣的訊息。如果主視窗和呼叫函式在同乙個執行緒中,除非你在特殊的介面操作函式中呼叫,其實主介面還是應該可以重新整理。socket接收資料的另外乙個函式recv則是乙個阻塞呼叫的例子。當socket工作在阻塞模式的時候,如果沒有資料的情況下呼叫該函式,則當前執行緒就會被掛起,直到有資料為止。

非阻塞

非阻塞和阻塞的概念相對應,指在不能立刻得到結果之前,該函式不會阻塞當前執行緒,而會立刻返回。

物件的阻塞模式和阻塞函式呼叫 物件是否處於阻塞模式和函式是不是阻塞呼叫有很強的相關性,但是並不是一一對應的。阻塞物件上可以有非阻塞的呼叫方式,我們可以通過一定的api去輪詢狀態,在適當的時候呼叫阻塞函式,就可以避免阻塞。而對於非阻塞物件,呼叫特殊的函式也可以進入阻塞呼叫。函式select就是這樣的乙個例子。

阻塞和非阻塞

在 windows 下的 socket 程式設計有兩個程式設計模型,阻塞和非阻塞。有時,他們也被叫做同步 阻 塞 和非同步 非阻塞 在 unix 中只支援阻塞模型。阻塞 indy 使用阻塞 socket 呼叫。阻塞呼叫很像乙個檔案的讀寫。當你讀資料或者寫資料時,直 到操作完成,函式才會返回。不同的是...

阻塞和非阻塞

在 windows 下的 socket 程式設計有兩個程式設計模型,阻塞和非阻塞。有時,他們也被叫做同步 阻 塞 和非同步 非阻塞 在 unix 中只支援阻塞模型。阻塞 indy 使用阻塞 socket 呼叫。阻塞呼叫很像乙個檔案的讀寫。當你讀資料或者寫資料時,直 到操作完成,函式才會返回。不同的是...

recv send 阻塞和非阻塞

在 阻塞模式 下,send函式的過程是將應用程式請求傳送的資料拷貝到傳送快取中傳送就返回.但由於傳送快取的存在,表現為 如果傳送快取大小比請求傳送的大小要大,那麼send函式立即返回,同時向網路中傳送資料 否則,send會等待接收端對之前傳送資料的確認,以便騰出快取空間容納新的待傳送資料,再返回 接...