C# Tutorials - Herong's Tutorial Examples - v3.32, by Herong Yang
Maximum Number of Threads in a Program
This section provides a tutorial example to try to find out how many threads can be launched in a single application.
From previous section, I learned how to assign CPUs to an application. Now I want to write a C# program test maximum number of threads that can be executed on my computer with 1 CPU.
Here is the test program I wrote:
// CrashThread.cs // Copyright (c) 2010 HerongYang.com. All Rights Reserved. using System; using System.Threading; public class CrashThread { public static void Main() { Console.Write("Press ENTER to continue:"); Console.ReadLine(); int count = 1000; Thread t; for (int n=1; n<=count; n++) { t = new Thread(Run); t.Start(); Console.WriteLine(System.DateTime.Now.TimeOfDay +": Launched thread "+n); } } public static void Run() { while(true); } }
I compiled CrashThread.cs with .NET 4 and started the executable, CrashThread.exe. The program prompt message shows up:
C:\herong>CrashThread.exe Press ENTER to continue:
Before pressing the "Enter" key, I used Task Manager to change Processor Affinity on CrashThread.exe to use only 1 CPU.
Then I pressed the "Enter" key to see many threads can be added before the program crashes on 1 CPUs.
After 20 minutes, I checked the output:
20:40:18.0832500: Launched thread 1 20:40:18.4582500: Launched thread 2 20:40:19.0363750: Launched thread 3 20:40:19.7863750: Launched thread 4 20:40:20.7551250: Launched thread 5 20:40:21.8957500: Launched thread 6 20:40:22.3957500: Launched thread 7 20:40:22.8957500: Launched thread 8 20:40:23.4582500: Launched thread 9 20:40:24.0832500: Launched thread 10 ... 20:41:41.4738750: Launched thread 51 20:41:44.7395000: Launched thread 52 20:41:48.0520000: Launched thread 53 20:41:51.4426250: Launched thread 54 20:41:54.8801250: Launched thread 55 20:41:54.8801250: Launched thread 55 20:41:58.3801250: Launched thread 56 20:42:01.9426250: Launched thread 57 20:42:05.5988750: Launched thread 58 20:42:09.2863750: Launched thread 59 20:42:13.0988750: Launched thread 60 ... 20:45:41.9113750: Launched thread 101 20:45:47.9113750: Launched thread 102 20:45:53.9113750: Launched thread 103 20:45:59.9113750: Launched thread 104 20:46:06.4895000: Launched thread 105 20:46:12.9113750: Launched thread 106 20:46:16.2707500: Launched thread 107 20:46:19.6457500: Launched thread 108 20:46:26.5051250: Launched thread 109 20:46:33.3801250: Launched thread 110 ... 20:58:49.2863750: Launched thread 151 20:58:56.5988750: Launched thread 152 20:59:10.8332500: Launched thread 153 20:59:25.0988750: Launched thread 154 20:59:39.7863750: Launched thread 155 20:59:54.3488750: Launched thread 156 21:00:08.9113750: Launched thread 157 21:00:24.2238750: Launched thread 158 21:00:39.2238750: Launched thread 159 20:58:35.2863750: Launched thread 150
I was happy to see that 150 threads were launched and the performance of my computer system is still normal. Here were some performance numbers reported on the Task Manager on CrashThread.exe:
CPU: 50% Mem Usage: 1,612K VM Size: 177,336K
Conclusion: .NET CLR (Common Language Runtime) handles multiple threads very well. I did not wait long enough to see what will happen at the end.
Table of Contents
Logical Expressions and Conditional Statements
Visual C# 2010 Express Edition
C# Compiler and Intermediate Language
Compiling C# Source Code Files
MSBuild - Microsoft Build Engine
Threads to Run Instance Methods
Performance Impact with Multiple Threads
Multi-Thread Programs on Multi-CPU Systems
►Maximum Number of Threads in a Program
System.Diagnostics.FileVersionInfo Class
WPF - Windows Presentation Foundation