我有一个多线程的代码在我的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