為什麼IO復用還需要搭配非阻塞IO

2021-10-01 14:21:10 字數 282 閱讀 2825

當資料達到socket緩衝區時,可能會因為一些原因被核心丟棄,比如,校驗和錯誤,這時io復用喚醒執行緒對socket讀並不能讀到資料,如果是阻塞io就會被阻塞住。

這個達到緩衝區的資料不一定被丟棄,但是也有可能被別人取走了,比如多個程序accept同乙個套接字時引發的驚群現象,只有乙個連線到來,但是所有的監聽程序都被喚醒了,但是最終只有乙個程序可以accept到這個請求,其他程序在阻塞io程序下都會被阻塞。

epoll的et模式必須要使用非阻塞io,因為需要多次迴圈讀寫直到eagan出現,如果使用阻塞io容易被阻塞住。

有了互斥量,為什麼還需要條件變數?

一。互斥量和條件變數簡介 互斥量 mutex 從本質上說是一把鎖,在訪問共享資源前對互斥量進行加鎖,在訪問完成後釋放互斥量上的鎖。對互斥量進行加鎖以後,任何其他試圖再次對互斥鎖加鎖的執行緒將會阻塞直到當前執行緒釋放該互斥鎖。如果釋放互斥鎖時有多個執行緒阻塞,所有在該互斥鎖上的阻塞執行緒都會變成可執行...

通過導數求極值為什麼還需要梯度下降

一直疑惑乙個問題 對於最小二乘法,為什麼不直接求導讓導數為 0 直接求極值呢?因為實際情況有些是不可行的,比如有時候求解這樣的方程非常複雜。所以有了梯度下降 詳細請檢視 對於阿爾法的取值 檢視 這裡舉個例子 y x 2 使用通過梯度最小二乘法計算極值 x x 2x 假設隨機x 5,假設 1 第一次迭...

為什麼有了IP位址還需要MAC位址?

長話短說,理由有三點。二.分層實現如果在ip包頭 header 中增加了 下一跳ip位址 這個字段,在邏輯上來說,如果ip位址夠用,交換機也支援根據ip位址 現在的二層交換機不支援這樣做 其實mac位址並不是必要的。但用mac位址和ip位址兩個位址,用於分別表示實體地址和邏輯位址是有好處的。這樣分層...