代码之家  ›  专栏  ›  技术社区  ›  Mario

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

  •  -2
  • Mario  · 技术社区  · 7 年前

    我正在尝试启动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();
    

    foreach (var i in Enumerable.Range(1, 10))
    {
        Thread tid = new Thread(new ThreadStart(Thread));
        tid.Start();
    }
    

    第二章:

    Parallel.ForEach(Enumerable.Range(1, 10), i => 
    {
            Thread tid = new Thread(new ThreadStart(Thread));
            tid.Start();
    });
    

    谢谢!

    1 回复  |  直到 7 年前
        1
  •  0
  •   Mario    7 年前

    经过一番修补,这个方法似乎很快:

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

    列一个线程的列表,然后在列表组装完成后启动它们。加分,如果线程创建子是在它自己的迷你线程。

    尽管要小心魔法,但是每个线程都有开销和额外的处理,所以如果在每个线程上执行的任务是短暂的,整个线程思想将失去性能而不是获得性能。