2009-12-29 86 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可能会(我不确定)节流线程的生成速度。