微軟跨平臺網頁開發框架ASP.NET Core即將迎來第7個主要版本,由於.NET 7對效能的諸多改善,ASP.NET Core 7也同時受益,官方解釋,由於.NET 7在效能部分的提升,許多方面直接或間接地強化ASP.NET Core效能。

ASP.NET Core 7從.NET 7中獲益,使Ampere機器可更好地擴展,並且獲得巨大的效能提升。Ampere機器是以Arm處理器為基礎,擁有大量核心,因為其低功耗和平價的優點,被用於許多雲端伺服器,但這些機器過去並無法很好的擴展,而.NET 7對全域執行緒池佇列,和Socket連線使用的記憶體進行分區,改善了這個缺點。

微軟解釋,分區能夠使核心在自己的佇列上運作,減少競爭並提高大型核心機器的可擴展性。微軟在80核心的Ampere機器上實驗,明文平臺基準效能提高了514%,JSON平臺基準效能也提高了311%。

但是為了提高效能,ASP.NET Core 7也做出一些妥協,因為現在有多個佇列被讀取,因此不再保證工作項目能以嚴格的FIFO排序進到全域執行緒佇列中,另外,當機器處在低負載狀態,要進行工作竊取(Work stealing)時,因為現在需要搜尋更多的佇列,因此可能使CPU使用率略為增加。

由於拋出異常可能成本高昂,而ASP.NET Core 7讓開發者可以掌握網頁伺服器Kestrel的Socket傳輸區域,因此開發者可進一步避免程式在連接關閉期間,在特定層拋出異常,微軟提到,在他們的測試中,不拋出異常能夠降低CPU使用率,特別是在Linux上,可以降低10% CPU使用率。

微軟在ASP.NET Core 6中,更新許多Kestrel中的非同步讀取方法,減少從請求中讀取所使用的記憶體,微軟在ASP.NET Core 7擴展了這項改進,最明顯的是在WebSockets的使用案例上,過去ASP.NET Core 6進行1,000次讀取,系統需要分配3,000個狀態機,也就是說,每次讀取系統就需要分配3個獨立的狀態機,而ASP.NET Core 7消除了所有WebSocket連接讀取的狀態機分配。

ASP.NET Core 6中Kestrel的HTTP/2處理,在特定情況存在較高的鎖爭用(Lock Contention),而ASP.NET Core 7消除了大部分鎖爭用的機會。微軟解釋,HTTP/2在單一連接上可以有多個串流,當一個串流寫入連接時,便需要一個鎖來阻塞其他並行的串流,他們測試了幾種方法,最後藉由在一個頻道中佇列所有寫入,並讓單一取用者任務程序來處理佇列,執行所有的寫入工作,進而消除大部分爭用,使伺服器不再被鎖爭用阻塞。

微軟在ASP.NET Core 6添加對HTTP/3的實驗性支援,在7.0中,HTTP/3已經不是實驗性功能,但仍是選擇啟用的項目。除了改善HTTP/3的可靠性、正確性和最終API定案之外,HTTP/3也有大幅度的效能提升,微軟改進客戶端和伺服器端用來壓縮標頭的QPack,QPack現在能以更有效率的方法壓縮傳送、接收標頭。

熱門新聞

Advertisement