對於非同步的理解。
之前對於同步方法和使用async、await的非同步方法一直很迷惑。
我覺得等待執行結果的非同步和同步方法有什麼區別嗎?
他們的執行順序都是一樣的啊?
不是都需要等待執行結果嗎?
今天翻了一下《c#高階程式設計》,才算搞清楚這裡面的差異,原來使用了async、await的非同步是不會阻塞執行緒的。
首先說說關於同步方法和非同步方法的區別。
比如說web**載入一些網路資源,是使用同步方法請求,那麼此時web**的使用者介面將會阻塞,直到該方法完成對資源的網路呼叫,並完成結果分析。
完成這些呼叫所需的時間取決與網路速度,以及伺服器當前的工作量。
對於使用者來說,介面卡掉、一段時間的等待都是不愉快的。
所以使用非同步呼叫。
非同步可以避免阻塞,在此期間可以做更多的事情。
但是非同步有乙個缺陷,相對於同步來說,它對於程式的流程充滿了不確定性,順序可能會顛倒。
所以在某些場景,比如說有多個非同步方法被呼叫,他們是有依賴關係的,後面的非同步方法需要使用到之前非同步方法的結果,我們需要按順序呼叫這些非同步方法,這個時候就需要使用async、await關鍵字來等待執行的結果,但是它不會阻塞執行緒。
對非同步IO的理解
在io程式設計一節中,我們已經知道,cpu的速度遠遠快於磁碟 網路等io。在乙個執行緒中,cpu執行 的速度極快,然而,一旦遇到io操作,如讀寫檔案 傳送網路資料時,就需要等待io操作完成,才能繼續進行下一步操作。這種情況稱為同步io。在io操作的過程中,當前執行緒被掛起,而其他需要cpu執行的 就...
對非同步非阻塞的理解
阻塞 執行緒在執行中如果遇到 i o 操作 如磁碟讀寫或網路通訊,通常要耗費較長的時間,這時作業系統會剝奪這個執行緒的 cpu 控制權,使其暫停執行,同時將資源讓給其他的工作執行緒,這種執行緒排程方式稱為 阻塞。當 i o 操作完畢時,作業系統將這個執行緒的阻塞狀態解除,恢復其對cpu的控制權,令其...
對 同步 非同步 阻塞 非阻塞的理解
老張愛喝茶,廢話不說,煮開水。出場人物 老張,水壺兩把 普通水壺,簡稱水壺 會響的水壺,簡稱響水壺 1 老張把水壺放到火上,立等水開。同步阻塞 老張覺得自己有點傻 2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。同步非阻塞 老張還是覺得自己有點傻,於是變高階了,買了把會響笛的那種水壺...