socket 阻塞與非阻塞 同步與非同步

2021-05-21 23:09:04 字數 899 閱讀 6405

阻塞與非阻塞。所謂阻塞方式的意思是指, 當試圖對該檔案描述符進行讀寫時, 如果當時沒有東西可讀,或者暫時不可寫, 程式就進入等待狀態, 直到有東西可讀或者可寫為止。而對於非阻塞狀態, 如果沒有東西可讀, 或者不可寫, 讀寫函式馬上返回, 而不會等待。預設情況下, 三述符處於阻塞狀態。

同步非同步與阻塞和非阻塞是兩種不同的概念來著

同步非同步指的是通訊模式,而阻塞和非阻塞指的是在接收和傳送時是否等待動作完成才返回

所以不能混淆這四個磁。

以下是我的一些理解,請大家多指教

首先是通訊的同步,主要是指客戶端在傳送請求後,必須得在服務端有回應後才傳送下乙個請求。所以這個時候的所有請求將會在服務端得到同步

其次是通訊的非同步,指客戶端在傳送請求後,不必等待服務端的回應就可以傳送下乙個請求,這樣對於所有的請求動作來說將會在服務端得到非同步,這條請求的鏈路就象是乙個請求佇列,所有的動作在這裡不會得到同步的。

阻塞和非阻塞只是應用在請求的讀取和傳送。

在實現過程中,如果服務端是非同步的話,客戶端也是非同步的話,通訊效率會很高,但如果服務端在請求的返回時也是返回給請求的鏈路時,客戶端是可以同步的,這種情況下,服務端是相容同步和非同步的。相反,如果客戶端是非同步而服務端是同步的也不會有問題,只是處理效率低了些。

同步=阻塞式,非同步=非阻塞式

同步和非同步都只針對於本機socket而言的

同步模式下,比如reciev和send,都要確保收到或傳送完才返回,繼續執行下面的**

不然就阻塞在**,所以,同步模式下,一般要用到執行緒來處理。

非同步模式就不同了,不管有沒有收到或傳送出去,他都馬上返回,繼續執行下面的**,結果又訊息通知。

在c# vs.net中, 預設的 socket 是 阻塞式的, 通過socket.blocking 可以看到,該值是true

socket阻塞與非阻塞 同步與非同步概念

看了不少文章,發現socket阻塞 非阻塞 同步 非同步概念講的比較混亂,甚至混用比如非阻塞和非同步。看了unix網路程式設計 五種i o模型 感覺講的比較清晰,現總結下,方便自己記憶理解。本人菜鳥一枚,如果 說得有誤歡迎拍磚指正,在此謝過。阻塞與非阻塞 阻塞與非阻塞io區別在於應用程序的呼叫是否立...

socket的阻塞與非阻塞,同步與非同步

同步 非同步主要針對c端 同步 所謂同步,就是在c端發出乙個功能呼叫時,在沒有得到結果之前,該呼叫就不返回。也就是必須一件一件事做,等前一件做完了才能做下一件事。例如普通b s模式 同步 提交請求 等待伺服器處理 處理完畢返回 這個期間客戶端瀏覽器不能幹任何事 非同步 非同步的概念和同步相對。當c端...

socket阻塞與非阻塞

何為阻塞?在以上過程中若連線還沒到來,那麼接受阻塞,程式執行到這裡不得不掛起,cpu轉而執行其他執行緒。在以上過程中若資料還沒準備好,請閱讀會一樣也會阻塞。阻塞式網路io的特點 多執行緒處理多個連線。每個執行緒擁有自己的棧空間並且占用一些cpu時間。每個執行緒遇到外部為準備好的時候,都會阻塞掉。阻塞...