Orchard原始碼 熱啟動

2022-01-24 04:56:00 字數 2346 閱讀 5129

概述

iis執行緒池中的執行緒數量是有限制的。當有多個長時間請求時,可能會耗盡iis可用執行緒。出現503錯誤。在mvc中。當遇到非cpu操作的長時間請求時,mvc提供了非同步方法來解決這個問題。

例:利用async和await實現非同步方法

// get: async

[asynctimeout(1000)]

public async taskindex()

回到orchard,在orchard啟動時,需要一定時間載入模組外掛程式,這時候如果出現大量請求,則有可能出現上面提到的錯誤。來看一下orchard中是如何解決這個問題。

專案結構orchard.warmupstarter ,是乙個單獨的專案。方便復用

具體實現

一句話概括實現步驟: 啟動時初始化乙個非同步請求列表,初始化期間有請求到來時,把該請求新增到請求列表中。當系統初始化完成時**起步請求列表並且清空。

warmuphttpmodule.signalwarmupstart(); 系統開始載入,初始化請求列表

public static void signalwarmupstart() }}

warmuphttpmodule.signalwarmupdone(); 系統載入完成,**請求列表並且清空

public static void signalwarmupdone()

if (temp != null)

}}webconfig中註冊warmuphttpmodule

請求到來時,執行warmuphttpmodule.beginbeginrequest**, 如果載入中,則請求新增到非同步列表,否則繼續執行**

private iasyncresult beginbeginrequest(object sender, eventargs e, asynccallback cb, object extradata) 

else

}

非同步程式設計模型 doneasyncresult 和 warmupasyncresult 實現iasyncresult

warmupasyncresult

/// /// asyncresult for "on hold" request (resumes when "completed()" is called)

///

private class warmupasyncresult : iasyncresult

public void completed()

bool iasyncresult.completedsynchronously

}bool iasyncresult.iscompleted

}object iasyncresult.asyncstate

}waithandle iasyncresult.asyncwaithandle

}}

doneasyncresult(不阻塞)

/// /// async result for "ok to process now" requests

///

private class doneasyncresult : iasyncresult

bool iasyncresult.completedsynchronously

}bool iasyncresult.iscompleted

}waithandle iasyncresult.asyncwaithandle

}object iasyncresult.asyncstate

}}

總結orchard.warmupstarter 已封裝好相關熱啟動**, 實際專案中如果初始化時間比較長,稍改造orchard.warmupstarter就可復用到自己的專案中。

參考

冷啟動 熱啟動

冷啟動 1 接通電源啟動計算機的方式,稱為冷啟動。2 介紹 自檢 3 具體操作步驟如下 加電 自檢 引導作業系統。熱啟動 1 熱啟動是指在計算機已經開啟的狀態下,通過鍵盤重新引導作業系統。一般在宕機時才使用。2 方法 左手按住 ctrl 和 alt 不放開,右手按下 del 然後同時放開。3 熱啟動...

熱啟動和冷啟動

在日常用機過程中,往往需要對計算機進行冷啟動和熱啟動,通常的方法是通過按reset 鍵實現冷啟動,按 實現熱啟動。它們的實 質都是轉入bios的入口點,即rom的起始位址ffff 0處 轉向啟動程式。該啟動程式在執行過程中需檢測復位標誌字 位於bios資料區位址0040 0072 的值,若為1234...

Nacos原始碼一 原始碼啟動

一 nacos 原始碼本地啟動 官方單機啟動文件 將原始碼匯入到idea,然後開啟console專案中的配置檔案 按照nacos文件中單機啟動模式修改mysql配置 資料庫連線串需要有時區 useunicode true characterencoding utf8 servertimezone u...