【发布时间】:2018-08-29 09:24:19
【问题描述】:
我知道这个问题无处不在,但我找不到适合我的问题。
我正在尝试同时启动 10 个线程而不减慢每个线程的速度。
我的问题是当我手动启动线程时,它们非常快。但是如果我使用循环启动它们,它们会非常慢。
这里是快速的地方:
Thread tid1 = new Thread(new ThreadStart(Thread));
tid1.Start();
Thread tid2 = new Thread(new ThreadStart(Thread));
tid2.Start();
Thread tid3 = new Thread(new ThreadStart(Thread));
tid3.Start();
Thread tid4 = new Thread(new ThreadStart(Thread));
tid4.Start();
Thread tid5 = new Thread(new ThreadStart(Thread));
tid5.Start();
Thread tid6 = new Thread(new ThreadStart(Thread));
tid6.Start();
Thread tid7 = new Thread(new ThreadStart(Thread));
tid7.Start();
Thread tid8 = new Thread(new ThreadStart(Thread));
tid8.Start();
Thread tid9 = new Thread(new ThreadStart(Thread));
tid9.Start();
Thread tid10 = new Thread(new ThreadStart(Thread));
tid10.Start();
我尝试过的慢方法:
1:
foreach (var i in Enumerable.Range(1, 10))
{
Thread tid = new Thread(new ThreadStart(Thread));
tid.Start();
}
2:
Parallel.ForEach(Enumerable.Range(1, 10), i =>
{
Thread tid = new Thread(new ThreadStart(Thread));
tid.Start();
});
任何帮助将不胜感激。
谢谢!
【问题讨论】:
-
您正在调用构造函数 ThreadStart。构造函数中有什么代码?构造函数必须在下一个线程开始之前完成执行。
-
您一般要达到什么目的?为什么需要同时启动它们
-
“我有很多工作要做”并不能完全解释为什么这是一个问题。确定使用
Parallel功能会达到预期的效果吗? -
您是否考虑过使用异步/等待任务 (TPL) 或 ThreadPool 线程?尽管有可能,但使用普通线程有点过时了。此外,“更多线程”不一定等于“更快”。
-
你能澄清一下这里的“快”和“慢”的意思吗?你有什么基准,什么是实际可衡量的结果,你想达到什么目标?
标签: c# multithreading loops foreach