Если вы используете совместную многозадачность и у вас плохая программа: тогда да, вы правы.
Однако в реальном мире должно произойти следующее:
Совместная многозадачность: я не продолжаю использовать процессор вечно. Вместо этого он либо даст другой программе шанс через некоторое время, либо когда он заблокирован.
Ответ Павла описывает последнее.
Упреждающая многозадачность (используется практически везде): ОС (не программа) на короткое время отдает ЦП программе, а затем отнимает ее. Это может быть так же просто, как запуск таймера и один раз, когда истечет время, остановив процесс и передав его следующему шагу / программе, которая ожидает.
В вашем случае подумайте об этом как о офисе с двумя работниками и тремя (или более) задачами.
(Позволяет называть их задача-A, задача-B и задача-C).
Первая сработала проверяет приказы супервайзеров, в которых говорится:
- Установите таймер на 10 минут. Когда это закончится, перестаньте работать над текущей задачей, поместите ее в конец списка TODO и продолжайте читать этот документ.
- Затем удалите первый элемент из верхней части списка TODO и начните работать над ним.
- Повторение.
Работник 1 устанавливает таймер и получает первое задание из списка TODO (в данном случае это задание A).
Работник 2 делает то же самое: он устанавливает таймер и получает то, что сейчас находится сверху списка TODO. Так как рабочий 1 удалил задачу-А из нее, рабочий 2 теперь начинает выполнение задачи-Б.
Десять минут спустя таймер отключается. Работник 1 прекращает работу над заданием A и получает инструкции супервизора. В них указано, что текущая задача находится внизу списка TODO. Продолжая инструкции супервизора, он теперь перезапускает таймер и начинает работать над тем, что сейчас находится наверху списка TODO (который является задачей C).
Работник 2 делает то же самое, останавливает задачу B и начинает с верхней части списка TODO (в данном примере это задача A).
И т.д.
Это несколько упрощено. Но это должно дать вам представление о том, как два шага (рабочие) могут работать 100% времени в трех или более задачах.
В реальных планировщиках есть еще много вещей. Например, прерывания (сравните это с звонком телефона в середине задачи и как с этим справиться), умное планирование (передача одной и той же задачи одному и тому же работнику, вероятно, приведет к тому, что она будет выполнена быстрее, так как работник уже знаком с ней), I/O (если работнику нужна книга из библиотеки (библиотек), он не будет ждать, пока не истечет таймер, но сразу же продолжит выполнение следующей задачи и т.д. И т.д.