Почему? Обычно на одном компьютере имеется очень ограниченное количество процессоров и ядер - вы получаете лишь небольшое количество, если независимые исполнительные блоки.
С другой стороны, существует ряд процессов и много других потоков.Каждый поток требует некоторого процессорного времени, которое назначается внутренне процессами ядра Windows.Обычно Windows блокирует все потоки и выделяет определенное количество времени ядра процессора определенным потокам, затем переключает контекст на другие потоки.
Когда вы вызываете Thread.Sleep, независимо от того, насколько маленьким вы убиваете весь промежуток времени Windowsдал потоку, поскольку нет никакой причины просто ждать это, и контекст переключается немедленно.Это может занять несколько мс, когда Windows в следующий раз предоставит вашему процессору немного процессора.
Что использовать? В качестве альтернативы, вы можете вращать ваш процессор , вращение - не страшная вещь и может быть очень полезным.Например, он используется в пространстве имен System.Collections.Concurrent с неблокирующими коллекциями, например:
SpinWait sw = new SpinWait();
sw.SpinOnce();