概述
iis執行緒池中的執行緒數量是有限制的。當有多個長時間請求時,可能會耗盡iis可用執行緒。出現503錯誤。在mvc中。當遇到非cpu操作的長時間請求時,mvc提供了非同步方法來解決這個問題。
例:利用async和await實現非同步方法
// get: async回到orchard,在orchard啟動時,需要一定時間載入模組外掛程式,這時候如果出現大量請求,則有可能出現上面提到的錯誤。來看一下orchard中是如何解決這個問題。[asynctimeout(1000)]
public async taskindex()
專案結構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)非同步程式設計模型 doneasyncresult 和 warmupasyncresult 實現iasyncresultelse
}
warmupasyncresult
/// /// asyncresult for "on hold" request (resumes when "completed()" is called)doneasyncresult(不阻塞)///
private class warmupasyncresult : iasyncresult
public void completed()
bool iasyncresult.completedsynchronously
}bool iasyncresult.iscompleted
}object iasyncresult.asyncstate
}waithandle iasyncresult.asyncwaithandle
}}
/// /// async result for "ok to process now" requests總結orchard.warmupstarter 已封裝好相關熱啟動**, 實際專案中如果初始化時間比較長,稍改造orchard.warmupstarter就可復用到自己的專案中。///
private class doneasyncresult : iasyncresult
bool iasyncresult.completedsynchronously
}bool iasyncresult.iscompleted
}waithandle iasyncresult.asyncwaithandle
}object iasyncresult.asyncstate
}}
參考
冷啟動 熱啟動
冷啟動 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...