SpinWait
An idle loop uses 100% CPU. It runs for a specified number of iterations in a C# program. With Thread.SpinWait
we specify this iteration count.
The CPU will max out for the required amount of time for this to complete. Meanwhile with Thread.Sleep
, no CPU usage will occur.
This program uses Thread.SpinWait
for one million iterations. It also uses Stopwatch
to time how long Thread.SpinWait
takes to complete.
SpinWait
is computationally intensive, it will complete earlier or later depending on your computer's clock speed.using System; using System.Diagnostics; using System.Threading; Stopwatch stopwatch = Stopwatch.StartNew(); // CPU is at maximum during this call. // ... (Try making it much larger to test.) Thread.SpinWait(1000000); Console.WriteLine(stopwatch.Elapsed.TotalMilliseconds);3.0908
I tried to determine how to adjust the number of threads optimally for a multiple-core machine. SpinWait
was helpful in this task.
Thread.Sleep
, the experiment did not involve the CPU and so did not yield correct results.Thread.SpinLock
, the results were correct. SpinLock
is necessary to simulate actual CPU usage.We looked at Thread.SpinWait
found in the System.Threading
namespace. If you want to waste electricity and make your computer do a lot of computations, this method is perfect.