原本也沒深究過這個,用的多了,完全憑藉經驗辦事,理論差的一塌糊塗,最近不流行那個openai,於是在偉大的人工智慧輔導下好好梳理一遍理論知識 初步理論認知 async 和 await 是 C# 語言中用於非同步編程的關鍵字,主要作用是讓代碼在等待非同步操作完成的時候繼續執行,從而達到不會阻塞線程的效果 ...
原本也沒深究過這個,用的多了,完全憑藉經驗辦事,理論差的一塌糊塗,最近不流行那個openai,於是在偉大的人工智慧輔導下好好梳理一遍理論知識
初步理論認知
async 和 await 是 C# 語言中用於非同步編程的關鍵字,主要作用是讓代碼在等待非同步操作完成的時候繼續執行,從而達到不會阻塞線程的效果
async 關鍵字用於標記非同步方法,就是宣告我這是我個非同步方法
await 關鍵字來等待自己裡面其他非同步操作方法完成(就套自己類型的娃)
然後是,非同步操作將在後臺線程上執行,直到它完成。
通俗概括一下就是,例如我請求A介面這個非同步方法,隨即程式立馬返回Task對象,並同時用後臺新線程執行(就是從.Net程式池內拿出個線程用)
.Net程式池
.NET 線程池是一種由 .NET 運行時維護的線程池,它在應用程式啟動時自動創建一組線程,併在需要時從線程池中獲取線程來執行任務,上面說的非同步在後臺線程執行就是從這拿
面試必備話術
好處是可以避免不必要的線程創建和銷毀開銷,同時能夠更好地利用現有的線程資源,提高應用程式的性能和吞吐量
創建非同步操作時,並不一定會創建新的線程,而是將操作提交給線程池中的一個線程來執行。這個線程通常稱為工作線程或後臺線程,因為它在後臺執行任務,不會阻塞當前線程
線程池中預設創建的工作線程數是由操作系統和運行時版本決定的,具體數量可以通過 ThreadPool.GetMinThreads 方法和 ThreadPool.GetMaxThreads 方法獲取
.NET Core 3.1 和 .NET 5.0 版本中,線程池中預設創建的工作線程數是 1000 個
線程池的大小並不是無限制的
線程池中工作線程的最佳數量取決於應用程式的負載和需求
衍生擴展
感言
寫代碼也有七八年了,做過無數各式各樣的系統,ERP,OA,PMS,HIS... 各種各樣的業務需求,這七八年裡從crud、到設計封裝公司框架、到玩docker、搞微服務。
從.Net Framework 到 .Net 6,從winform到WPF
從 js jq 寫到現在的uniapp 和 vue3, 從css 到 scss,ES6, Typescript ...
一路走來90%的實踐經驗,不足10%的理論記憶...
導致反而工作久了,面臨著面試困難,實在面對面試官的標準提問,實在是難以讓人家滿意,問項目還有各種技術作用問題,解決方案吧,常掛在嘴邊的也總是說看具體業務
唉,乾越久,越難乾,倒不是技術難,至少我對技術的追求熱情從未散去,而是準備簡歷和麵試難一度讓我懷疑人生,這逼不得已回頭看,藉助當下流行的ai大哥幫我完整的背誦一下‘標準答案’
那個曾經發誓堅決不背面試題的少年,已經不在了,終究敗給現實