2009-12-29 112 views
0

我有一個多線程的代碼在我的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

我的代碼有什麼問題或者它與差異有關平臺? 謝謝

+0

兩臺機器的硬件架構是否相同?如果第二個(64位)系統是多核的,那可能是一個因素。 – jfawcett 2009-12-29 05:21:11

+0

哦,還有,是2008服務器R1還是R2? R1是ServerVista,而R2是ServerWin7。兩者之間的巨大差異。 – jfawcett 2009-12-29 05:29:44

+2

不是你的問題的答案,而是一個強烈的建議:你應該真的考慮使用內置於asp.net的異步框架。您可以排隊多個項目而不會導致您的請求線程阻塞並等待。只需要很少的額外代碼來編寫代碼,就可以獲得更高的速度和更好的併發性。 – 2009-12-29 05:44:33

回答

1

我認爲x64上線程的堆棧大小大於1Mb,就像它在Windows 2003 x86上一樣。嘗試使用線程池來降低創建新線程的成本。

此外,Windows 2008上的新IIS可能會(我不確定)節流線程的生成速度。