Запуск нескольких потоков одновременно без замедления - PullRequest
0 голосов
/ 29 августа 2018

Я знаю, что этот вопрос есть везде, но я не смог найти то, что мне подходит.

Я пытаюсь запустить 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 голосов
/ 29 августа 2018

После небольшой переделки этот метод кажется довольно быстрым:

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

Составьте список потоков, затем запустите их, как только этот список будет собран. Бонусные баллы, если подпрограмма создания потока находится на его собственной мини-теме.

Хотя остерегайтесь магии, каждый поток требует дополнительных затрат и дополнительной обработки, поэтому, если задачи, выполняемые в каждом потоке, недолговечны, вся идея создания потоков будет скорее терять производительность, чем получать ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...