我有一個多線程的代碼在我的asp.net應用程序運行像如下:多線程開始時間
...
List<Thread> workers = new List<Thread>();
foreach (Airline airline in this._criteria.Airlines)
{
Task mytask = new Task();
Thread t = new Thread(new ThreadStart(mytask.Execute));
workers.Add(t);
t.Start();
}
//block all until finish
foreach (var t in workers)
{
t.Join();
}
...
此代碼是在服務器上的一個(是windows2003,32位)和一個偉大的速度做工精細。 但是當我將它移動到新的服務器,Windows2008 64位時,我發現所有的任務也沒有開始併發。
這裏開始的時間用於服務器上的每個任務: - RQST =時候開始任務 - RESP =時間完成任務
--------------- --------服務器2:64位Windows 2008 ----------------- *你會看到每個任務的開始時間(首先在01:12開始:55.233和去年開始在01:13:11.773)
26230 2009-12-29 01:13:12.953 5812 RESP
26229 2009-12-29 01:13:11.773 5812 RQST
26228 2009-12-29 01:13:05.453 616 RESP
26220 2009-12-29 01:13:00.213 616 RQST
26227 2009-12-29 01:13:02.843 5792 RESP
26224 2009 -12-29 01:13:01.653 5792 RQST
26225 2009-12-29 01:13:01.873 4136 RESP
26221 2009-12-29 01:13:00.657 4136 RQST
26226 2009- 12-29 01:13:02.433 4932 Resp
26223 2009-12-29 01:13:01.150 4932 Rqst
26222 2009-12-29 01:13:00.910 5096 RESP
26219 2009-12-29 01:12:59.813 5096 RQST
26217 2009-12-29 01:12:56.703 3332 RESP
26216 2009-12-29 01:12:55.303 3332 RQST
26218 2009-12-29 01:12:56.703 3768 RESP
26215 2009-12-29 01:12:55.233 3768 RQST
- ----------------------- server1:windows 2003 -----------------
26129 2009-12-29 01:11:44.107 5056 RESP
26126 2009-12-29 01:11:42.950 5056 RQST
26130 2009-12-29 01:11:44.107 7368 RESP
26127 2009-12-29 01:11:42.967 7368 RQST
26128 2009-12-29 01:11:44.090 5548 RESP
26125 2009-12-29 01:11:42.933 5548 RQST
26120 2009-12-29 01:11:42.887 8100 Resp
26117 2009-12-29 01:11:41.637 8100 Rqs t
26121 2009-12-29 01:11:42.887 7640 Resp
26116 2009-12-29 01:11:41。623 7640 RQST
26122 2009-12-29 01:11:42.887 7780 RESP
26119 2009-12-29 01:11:41.700 7780 RQST
26123 2009-12-29 01:11:42.887 1868 RESP
26115 2009-12-29 01:11:41.543 1868 RQST
26118 2009-12-29 01:11:41.670 5936 RESP
26124 2009-12-29 01:11:42.887 5936 RQST
我的代碼有什麼問題或者它與差異有關平臺? 謝謝
兩臺機器的硬件架構是否相同?如果第二個(64位)系統是多核的,那可能是一個因素。 – jfawcett 2009-12-29 05:21:11
哦,還有,是2008服務器R1還是R2? R1是ServerVista,而R2是ServerWin7。兩者之間的巨大差異。 – jfawcett 2009-12-29 05:29:44
不是你的問題的答案,而是一個強烈的建議:你應該真的考慮使用內置於asp.net的異步框架。您可以排隊多個項目而不會導致您的請求線程阻塞並等待。只需要很少的額外代碼來編寫代碼,就可以獲得更高的速度和更好的併發性。 – 2009-12-29 05:44:33