多线程开始时间

时间:2009-12-29 05:16:54

标签: c# multithreading

我的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 64bit时,我发现所有任务都没有开始同时发生。

以下是两台服务器上每项任务的开始时间:    - Rqst =任务开始的时间    - Resp =完成任务的时间

----------------------- server 2:64bit 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 Rqst

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

我的代码有什么问题,或者是差异平台吗? 感谢

1 个答案:

答案 0 :(得分:1)

我认为x64上线程的堆栈大小大于1Mb,就像在Windows 2003 x86上一样。尝试使用线程池来降低创建新线程的成本。

此外,Windows 2008上的新IIS可能(我不确定)会限制线程的生成速度。