阻塞:當某個事件或者任務在執行過程中,它發出乙個請求操作,但是由於該請求操作需要的條件不滿足,那麼就會一直在那等待,直至條件滿足;
非阻塞:當某個事件或者任務在執行過程中,它發出乙個請求操作,如果該請求操作需要的條件不滿足,會立即返回乙個標誌資訊告知條件不滿足,不會一直在那等待。
這就是阻塞和非阻塞的區別。也就是說阻塞和非阻塞的區別關鍵在於當發出請求乙個操作時,如果條件不滿足,是會一直等待還是返回乙個標誌資訊。
舉個簡單的例子:假如我要讀取乙個檔案中的內容,如果此時檔案中沒有內容可讀,對於阻塞來說就是會一直在那等待,直至檔案中有內容可讀;而對於非阻塞來說,就會直接返回乙個標誌資訊告知檔案中暫時無內容可讀。
在網上有一些朋友將同步和非同步分別與阻塞和非阻塞畫上等號,事實上,它們是兩組完全不同的概念。注意,理解這兩組概念的區別對於後面io模型的理解非常重要。
同步和非同步著重點在於多個任務的執行過程中,乙個任務的執行是否會導致整個流程的暫時等待;
而阻塞和非阻塞著重點在於發出乙個請求操作時,如果進行操作的條件不滿足是否會返會乙個標誌資訊告知條件不滿足。
什麼是程序阻塞
什麼是程序阻塞 正在執行的程序由於提出系統服務請求 如i o操作 但因為某種原因未得到作業系統的立即響應,或者需要從其他合作程序獲得的資料尚未到達等原因,該程序只能呼叫阻塞原語把自己阻塞,等待相應的事件出現後才被喚醒。阻塞狀態 正在進行的程序由於發生某事件而暫時無法繼續執行時,便放棄處理機而處於暫停...
ET為什麼要是非阻塞的
參考 什麼時候會阻塞 讀乙個空的緩衝區的時候,就會產生阻塞。為什麼lt可以使用阻塞和非阻塞,et只能使用非阻塞?是這樣的,lt是對於每個epoll wait返回的讀事件,每次都是讀取一定數量的位元組,然後返回,若沒讀完,等待下一次epoll wait再讀,因此lt的每次讀的時候緩衝區都是非空的 而e...
NIO阻塞案例講解,為什麼會阻塞和解決辦法
public void client throws ioexception 為什麼要使用shutdownoutput呢,如果用close,name整個通道都會關閉,包括網路連線,所以肯定不行,因為接下去還有其他操作 而wirte還沒有關閉通道一直處於寫入狀態,服務端schannel並不知道結束了,所...