同时启动多个线程而不会减慢速度

时间:2018-08-29 09:24:19

标签: c# multithreading loops foreach

我知道这个问题无处不在,但我找不到适合我的问题。

我正在尝试启动同时运行的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();
});

任何帮助将不胜感激。

谢谢!

1 个答案:

答案 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();

列出线程列表,然后在列表组装后启动它们。奖励指向线程创建子线程是否在其自己的迷你线程上。

尽管要警惕,但每个线程都会涉及开销和额外的处理,因此,如果在每个线程上执行的任务是短暂的,那么整个线程的想法将失去性能,而不是获得性能。