我知道这个问题无处不在,但我找不到适合我的问题。
我正在尝试启动同时运行的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();
});
任何帮助将不胜感激。
谢谢!
答案 0 :(得分:0)
稍作修改后,此方法似乎很快:
List<Thread> threadlist = new List<Thread>();
for (int i = 0; i <= 10; i++)
threadlist.Add(new Thread(new ThreadStart(wastetime)));
foreach (Thread t in threadlist)
t.Start();
列出线程列表,然后在列表组装后启动它们。奖励指向线程创建子线程是否在其自己的迷你线程上。
尽管要警惕,但每个线程都会涉及开销和额外的处理,因此,如果在每个线程上执行的任务是短暂的,那么整个线程的想法将失去性能,而不是获得性能。