Для суммирования того, что было сказано ранее:
Процессорное время назначается в количествах (интервалы времени)
Планировщик потока выбирает поток для запуска. Этот поток может работать весь промежуток времени, даже если потоки с более высоким приоритетом становятся готовыми к работе.
Типичные интервалы времени составляют 8,15 мс, в зависимости от архитектуры.
Поток может «отказаться» от временного интервала - обычно Sleep (0) или Sleep (1). Sleep (0) позволяет другому потоку с таким же или более высоким приоритетом работать для следующего отрезка времени. Sleep (1) допускает «любой» поток.
Временной интервал является глобальным и может быть затронут всеми процессами
Даже если вы не измените временной интервал, это может сделать кто-то другой.
Даже если временной интервал не изменяется, вы можете «перепрыгнуть» между двумя разными временами.
Для простоты предположим, что одно ядро, ваш поток и другой поток X.
Если поток X работает с тем же приоритетом, что и у вас, сокращая числа, ваш сон (1) займет весь промежуток времени, 15 мс, что типично для клиентских систем.
Если поток X работает с более низким приоритетом и через 4 мс отказывается от своего собственного временного интервала, ваш сон (1) займет 4 мс.