<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ASP.NET Core進(jìn)程內(nèi)與進(jìn)程外的性能對(duì)比

          共 3084字,需瀏覽 7分鐘

           ·

          2020-09-18 20:35

          轉(zhuǎn)自:角落的白板報(bào)
          cnblogs.com/wer-ltm/p/13637198.html

          前言


          本文內(nèi)容是《深入去淺出ASP.NET Core》提供的擴(kuò)展內(nèi)容,畢竟在書里說進(jìn)程內(nèi)外的性能說明對(duì)比,對(duì)于初學(xué)者而言,稍微復(fù)雜了點(diǎn)。


          我在B站的視頻是基于.NET Core 2.2提供的案例,在書籍中提供的是.NET Core 3.1的案例。有人問,默認(rèn)進(jìn)程到底是進(jìn)程外還是進(jìn)程內(nèi)。


          ASP.NET Core 默認(rèn)進(jìn)程


          ASP.NET Core 2.2 由默認(rèn)的進(jìn)程外,所以需要我們指定下項(xiàng)目文件中的進(jìn)程信息。

          而從ASP.NET Core 3.X開始,dotnet開發(fā)團(tuán)隊(duì)又將它修改為了進(jìn)程內(nèi)。


          所以請(qǐng)記?。?/span>


          • ASP.NET Core 2.X及以前默認(rèn)是進(jìn)程外托管


          • ASP.NET Core 3.X默認(rèn)為進(jìn)程內(nèi)托管


          我最近查詢了下,應(yīng)該說最早.NET Core就不支持進(jìn)程內(nèi),所以也是慢慢迭代到支持進(jìn)程內(nèi)的。


          ASP.NET Core的進(jìn)程內(nèi)托管


          使用 InProcess 托管,應(yīng)用程序托管在 IIS 工作進(jìn)程(w3wp.exe 或 iisexpress.exe)中。只有一個(gè) Web 服務(wù)器,它是承載我們的應(yīng)用程序的 IIS 服務(wù)器,如圖是進(jìn)程內(nèi)托管圖。



          在ASP.NET Core 2.2后,IIS上有了一個(gè)In Process托管模型,該模型直接在IIS應(yīng)用程序池內(nèi)部托管ASP.NET Core,而無需使用代理dotnet.exe運(yùn)行.NET Core本機(jī)Kestrel Web服務(wù)器的外部實(shí)例。


          進(jìn)程內(nèi)模型不使用Kestrel,而是使用IISHttpServer()直接在IIS應(yīng)用程序池內(nèi)部托管的新Web服務(wù)器實(shí)現(xiàn),該實(shí)現(xiàn)與傳統(tǒng)的ASP.NET被引入IIS的方式有些相似。



          此實(shí)現(xiàn)形式,應(yīng)用會(huì)訪問本機(jī)IIS對(duì)象以建立創(chuàng)建的請(qǐng)求數(shù)據(jù),并將HttpContext其傳遞到ASP.NET Core中間件管道。


          當(dāng)然這些都是.NET Core層面的處理,我們作為應(yīng)用開發(fā)者,基本會(huì)去關(guān)心和留意它。


          但是就是這個(gè)調(diào)整,大大的提高了ASP.NET Core在IIS上的請(qǐng)求吞吐量。


          實(shí)際生產(chǎn)環(huán)境中InProces還是OutOfProcess


          對(duì)于部署項(xiàng)目到IIS環(huán)境中,您幾乎肯定希望是采用InProcess模式進(jìn)行托管,因?yàn)樗峁┝烁玫男阅埽⑶彝ǔU加玫馁Y源較少,因?yàn)樗苊饬薎IS和Kestrel之間可能存在的網(wǎng)絡(luò)抖動(dòng)。


          但是是其他場(chǎng)景下,我就推薦采用OutOfProcess模式了,比如:


          • 用于故障排除和調(diào)試故障服務(wù)器(例如,您可以在啟用控制臺(tái)日志記錄,查看更加詳細(xì)的信息)。


          • 同一個(gè)應(yīng)用程序?qū)崿F(xiàn)100%兼容,無論是部署在Windows還是Linux上,Kestrel的主要機(jī)制是可以處理所有平臺(tái)上的HTTP請(qǐng)求。


          • 使用InProcess模型時(shí),則不會(huì)使用Kestrel服務(wù)(這個(gè)在我的書中有詳細(xì)說明),而是直接與IIS的請(qǐng)求管道中的模塊進(jìn)行通信。


          調(diào)整為進(jìn)程外托管


          我們可以通過修改項(xiàng)目文件,配置AspNetCoreHostingModel值以下


          <AspNetCoreHostingModel>OutOfProcessAspNetCoreHostingModel >


          然后就可以調(diào)整為進(jìn)程外托管模式。


          關(guān)于更多進(jìn)程內(nèi)和進(jìn)程外的知識(shí),可以查看《深入淺出ASP.NET Core》的5.4章內(nèi)容。


          West Wind WebSurge 測(cè)試


          我準(zhǔn)備了一個(gè)項(xiàng)目Demo,使用 West Wind WebSurge 軟件來測(cè)試下進(jìn)程內(nèi)與進(jìn)程外項(xiàng)目的吞吐情況。


          它還可以檢查服務(wù)器的HTTP響應(yīng),并檢查Web服務(wù)器Kestrel或Microsoft IIS作為Web服務(wù)器:


          ASP.NET Core2.X 進(jìn)程外(OutOfProcess)



          ASP.NET Core2.X 進(jìn)程內(nèi)(Inprocess)



          性能對(duì)比


          使用新的In Process模型的明顯原因是它更快,使用的資源更少,因?yàn)樗苯釉贗IS應(yīng)用程序池的過程中運(yùn)行。沒有內(nèi)部HTTP流量和開銷,請(qǐng)求將立即處理。


          本次測(cè)試,僅僅是為了對(duì)比進(jìn)程內(nèi)核進(jìn)程外的性能對(duì)比,不作為其他應(yīng)用程序的抗負(fù)載能力的參考。


          因?yàn)樵L問的接口很簡單,請(qǐng)求僅表明可以大大提高潛在的吞吐量,但是對(duì)于長流程的請(qǐng)求和請(qǐng)求訪問時(shí)間,應(yīng)用程序處理的開銷也增加,所以理性看待。


          尋求高的性能始終是一個(gè)好主意,提供程序的吞吐量意味著更少的請(qǐng)求延遲,更快的響應(yīng)時(shí)間以及更少的服務(wù)器開銷,增加更多的負(fù)載能力。


          我準(zhǔn)備了一臺(tái)4核8G的筆記本,因?yàn)檫@臺(tái)筆記本裝了很多其他應(yīng)用,因此產(chǎn)生的結(jié)果肯定不如服務(wù)器的結(jié)果,現(xiàn)在開始進(jìn)行測(cè)試。


          進(jìn)程內(nèi)托管模式結(jié)果



          上面的進(jìn)程內(nèi)托管模式,我們可以看到一共發(fā)送了3.7W次請(qǐng)求,每秒633次請(qǐng)求的處理速度。


          進(jìn)程外托管模式結(jié)果



          切換為進(jìn)程外后,一共處理了1.3W次請(qǐng)求,每秒是217次請(qǐng)求處理速度。


          可以看到進(jìn)程外的性能比進(jìn)程內(nèi)的較低。


          再次說明,因?yàn)槲业腜C機(jī)中安裝了和運(yùn)行了大量的其他應(yīng)用,給予它測(cè)試的內(nèi)存和CPU是不足夠的,感興趣的可以,自己進(jìn)行測(cè)試。


          最后


          盡管IIS被不停的邊緣化以支持在Linux和Docker上托管,但請(qǐng)記住,如果發(fā)布到

          云原生平臺(tái),如Azure的WebAPP或者其他未明確指定的平臺(tái),IIS依然是ASP.NET Core 部署的默認(rèn)模型。


          這說明IIS確實(shí)還在很多場(chǎng)景中有廣泛的使用,因此它不會(huì)很快消失。


          微軟通過新增的進(jìn)程內(nèi)模型,提供更好的性能處理機(jī)制以此來增加對(duì)它的支持。


          現(xiàn)在開始,我們有兩種選擇,


          • 可以使用OutofProcessing(通過IIS代理請(qǐng)求)并使用完全獨(dú)立的ASP.NET Core控制臺(tái)應(yīng)用程序(通過基于.NET的Kestrel Web服務(wù)器使用)托管在IIS上,


          • 也可以使用InProcess托管模型,它與經(jīng)典ASP.NET通過其自身的本機(jī)API與IIS進(jìn)行交互的方式更為相似。


          • In Process模型在請(qǐng)求吞吐量方面要快得多,因此在幾乎所有情況下,在IIS上托管時(shí),您都希望選擇InProcess模型。


          文章參考來源:https://weblog.west-wind.com/posts/2019/Mar/16/ASPNET-Core-Hosting-on-IIS-with-ASPNET-Core-22#check-the-response-server-header


          案例源代碼地址:https://github.com/RickStrahl/AspetCoreIISInprocessHostingSample

          往期精彩回顧




          【推薦】.NET Core開發(fā)實(shí)戰(zhàn)視頻課程?★★★

          .NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第一章 入門篇-開篇及總體規(guī)劃

          【.NET Core微服務(wù)實(shí)戰(zhàn)-統(tǒng)一身份認(rèn)證】開篇及目錄索引

          Redis基本使用及百億數(shù)據(jù)量中的使用技巧分享(附視頻地址及觀看指南)

          .NET Core中的一個(gè)接口多種實(shí)現(xiàn)的依賴注入與動(dòng)態(tài)選擇看這篇就夠了

          10個(gè)小技巧助您寫出高性能的ASP.NET Core代碼

          用abp vNext快速開發(fā)Quartz.NET定時(shí)任務(wù)管理界面

          在ASP.NET Core中創(chuàng)建基于Quartz.NET托管服務(wù)輕松實(shí)現(xiàn)作業(yè)調(diào)度

          現(xiàn)身說法:實(shí)際業(yè)務(wù)出發(fā)分析百億數(shù)據(jù)量下的多表查詢優(yōu)化

          關(guān)于C#異步編程你應(yīng)該了解的幾點(diǎn)建議

          C#異步編程看這篇就夠了

          給我好看

          您看此文用

          ??·?

          秒,轉(zhuǎn)發(fā)只需1秒呦~

          好看你就

          點(diǎn)點(diǎn)


          瀏覽 66
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产亚洲色婷婷久久99 | 亚洲最大在线视频 | 国产内射免费观看视频 | 久久婷婷五月综合 | 亚洲三级理论 |