NET Core aync await任務模型的劣化問題

在寫測試用例時,順手做了一個TASK模型的壓力測試。發現TASK模型的性能極其低下!

數據處理邏輯:

        1:主程序不停發送數據修改命令

        2:數據管理器,接收命令,緩存命令。

        3:後臺線程分批次處理,一次處理一批命令,按照命令內容讀寫數據,修改文件。

        4:完成後, 調用Task.Start函數,讓等候該批次任務的命令執行後續操作。

         5:完成後續操作,完成處理流程。

問題:

        在使用接口避開Socket操作後,只剩下對文件系統的操作時,系統的效率極其低下。CPU使用率不超過1%,磁盤使用率不超過1%(最大0.9M/S)。硬件性能完全沒有發揮出來!

        進一步分下,發現主要是命令排隊存在問題:

          

大量的操作是一個命令執行一次,僅少數幾次,會有多個命令同時執行。並沒有在緩衝區緩存大量數據,讓文件操作效率更高。

 

原因分析:

       從等待任務的各種跡象看,導致緩衝邏輯失效的根本原因是 TASK的等待操作。Task.ContinueWith函數,會導致任務等待,這種等待不是線程阻塞,但當任務隊列達到配置的最大值後,系統會阻塞新建Task。阻止新建任務,可以從源頭上降低系統吞吐能力,保證系統穩定性。

 

 

哎~。微軟的技術都是看起來好,較真起來就沒用了!

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章