【发布时间】:2018-01-19 19:06:21
【问题描述】:
我正在编写一个简单的测试,它只记录并发请求开始的时间,然后休眠一秒钟。
static void TestParallelism()
{
int expectedThreadCount = 100;
ThreadPool.SetMaxThreads(Environment.CurrentManagedThreadId, expectedThreadCount);
var module = new WCFCompositeModule();
module.Initialize(new Keywords());
var range = Enumerable.Range(0, expectedThreadCount);
var startTimes = new ConcurrentBag<DateTime>();
var parallelOptions = new ParallelOptions { MaxDegreeOfParallelism = expectedThreadCount };
Parallel.ForEach(range, i =>
{
startTimes.Add(DateTime.Now);
Thread.Sleep(1000);
});
foreach (var time in startTimes)
{
Console.WriteLine(string.Format("{0: HH:mm:ss.fff}", time));
}
Console.ReadLine();
}
当我使用 100 个预期线程执行此操作时,我可以看到 12 个不同的不同开始时间,所有时间都相差 1 秒。而不是看到它们都在同一秒开始。
样本
13:59:27.475 13:59:26.473 13:59:25.473 13:59:24.471 13:59:23.470 13:59:22.469
这是因为 sleep 阻塞了线程吗?
【问题讨论】:
-
在不睡觉的情况下试了会发生什么?
-
没有睡眠,一切都按预期工作
标签: c# multithreading concurrency