Я читал в книгах, что создание потоков дорого (не так дорого, как создание процесса, но тем не менее оно есть), и мы должны избегать этого. Я пишу тестовый код, и я был шокирован тем, как быстро создается поток.Почему создание потоков происходит так быстро?
using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
static int testVal = 0;
static void Main(string[] args)
{
const int ThreadsCount = 10000;
var watch = Stopwatch.StartNew();
for (int i = 0; i < ThreadsCount; i++)
{
var myThread = new Thread(MainVoid);
myThread.Start();
}
watch.Stop();
Console.WriteLine("Test value ={0}", testVal);
Console.WriteLine("Ended in {0} miliseconds", watch.ElapsedMilliseconds);
Console.WriteLine("{0} miliseconds per thread ", (double)watch.ElapsedMilliseconds/ThreadsCount);
}
static void MainVoid()
{
Interlocked.Increment(ref testVal);
}
}
}
Выход:
Test value =10000
Ended in 702 miliseconds
0,0702 miliseconds per thread.
Является ли мой код неправильно или создание нити так быстро и советы в книгах неверны? (Я вижу только некоторое потребление памяти на поток, но не время создания.)
Ваши темы не работают, вы уверены, что они действительно начали? – blueberryfields
@blueberryfields Interlocked.Increment (ref testVal); это работа! –
Вы создали 10000 потоков за 0,7 секунды - это может быть быстро или может быть очень медленным, в зависимости от вашей задачи. Если вы можете решить одну и ту же задачу за 0,1 секунды без использования каких-либо потоков, то потоки будут медленными и не имеют никакого смысла. В противном случае потоки хороши. В принципе, это зависит. У создания темы действительно есть накладные расходы, независимо от того, можете ли вы себе это позволить, это реальная проблема. 0.07 миллисекунд на поток может быть много, если вы можете сделать то же самое быстрее, не создавая поток. Контекст имеет значение. – IVlad