何為阻塞?
在以上過程中若連線還沒到來,那麼接受阻塞,程式執行到這裡不得不掛起,cpu轉而執行其他執行緒。
在以上過程中若資料還沒準備好,請閱讀會一樣也會阻塞。
阻塞式網路io的特點:多執行緒處理多個連線。每個執行緒擁有自己的棧空間並且占用一些cpu時間。每個執行緒遇到外部為準備好的時候,都會阻塞掉。阻塞的結果就是會帶來大量的程序上下文切換
。且大部分程序上下文切換可能是無意義的
。比如假設乙個執行緒監聽乙個埠,一天只會有幾次請求進來,但是該cpu不得不為此執行緒不斷做上下文切換嘗試,大部分的切換以阻塞告終。
何為非阻塞?
下面有個隱喻:
一輛從a開往b的公共汽車上,路上有很多點可能會有人下車。司機不知道哪些點會有哪些人會下車
,對於需要下車的人,如何處理更
? 1.司機過程中定時詢問每個乘客是否到達目的地
,若有人說到了,那麼司機停車,乘客下車。(類似阻塞式)
2.每個人告訴售票員自己的目的地,然後睡覺,司機只和售票員互動,到了某個點由售票員通知乘客下車。(類似非阻塞)
很顯然,每個人要達某某目的地可以認為是乙個執行緒,司機可以認為是cpu。在阻塞式裡面,每個執行緒需要不斷的輪詢,上下文切換,以達到找到目的地的結果。而在非阻塞方式裡,每個乘客(執行緒)都在睡覺(休眠),只在真正外部環境準備好了才喚醒,這樣的喚醒肯定不會阻塞。
非阻塞的原理
把整個過程分類中翻譯e月刊小的任務,通過任務間協作完成。
由乙個專門的執行緒來處理所有的io事件,並負責分發。
事件驅動機制:事件到的時候觸發,而不是同步的去監視事件。
執行緒通訊:執行緒之間通過等待,通知等方式通訊。保證 -次上下文切換都是有意義的。減少無謂的程序切換。
Socket 阻塞與非阻塞模式
阻塞模式 windows套接字在阻塞和非阻塞兩種模式下執行i o操作。在阻塞模式下,在i o操作完成前,執行的操作函式一直等候而不會立即返回,該函式所在的執行緒會阻塞在這裡。相反,在非阻塞模式下,套接字函式會立即返回,而不管i o是否完成,該函式所在的執行緒會繼續執行。在阻塞模式的套接字上,呼叫任何...
socket的阻塞與非阻塞模式
阻塞模式 windows套接字在阻塞和非阻塞兩種模式下執行i o操作。在阻塞模式下,在i o操作完成前,執行的操作函式一直等候而不會立即返回,該函式所在的執行緒會阻塞在這裡。相反,在非阻塞模式下,套接字函式會立即返回,而不管i o是否完成,該函式所在的執行緒會繼續執行。在阻塞模式的套接字上,呼叫任何...
socket 阻塞與非阻塞 同步與非同步
阻塞與非阻塞。所謂阻塞方式的意思是指,當試圖對該檔案描述符進行讀寫時,如果當時沒有東西可讀,或者暫時不可寫,程式就進入等待狀態,直到有東西可讀或者可寫為止。而對於非阻塞狀態,如果沒有東西可讀,或者不可寫,讀寫函式馬上返回,而不會等待。預設情況下,三述符處於阻塞狀態。同步非同步與阻塞和非阻塞是兩種不同...