创建线程是一件非常消耗资源的事情。下面的C#代码可以得到创建一个线程的空间开销:
private static void DumyTask()
{
Thread.CurrentThread.Suspend();
}
private static long GetMemoryUsageInKB()
{
int oneKB = 1024;
long memorySize = Process.GetCurrentProcess().VirtualMemorySize64;
return memorySize / oneKB;
}
private static void Main(string[] args)
{
long memoryBefore = GetMemoryUsageInKB();
int threadNumber = 100;
for (int i = 0; i < threadNumber; ++i)
{
Thread thread = new Thread(new ThreadStart(DumyTask));
thread.Priority = ThreadPriority.Lowest;
thread.Start();
long currentMemory = GetMemoryUsageInKB();
Console.WriteLine("Memory when {0} threads created: {1} Kb", i + 1, currentMemory);
}
long memoryAfter = GetMemoryUsageInKB();
long memoryPerThread = (memoryAfter - memoryBefore) / threadNumber;
Console.WriteLine("Memory usage per thread: {0} KB", memoryPerThread);
}
运行上述代码,将会发现穿件一个线程的开销大概是1314KB,超过1MB。