Ответ
Вытесняющая многозадачность требует больше системных ресурсов из-за накладных расходов на переключение контекста (context switching). Операционная система (ОС) принудительно прерывает выполнение одного процесса или потока и передает управление другому, основываясь на алгоритмах планирования и квантах времени.
Причины повышенного потребления ресурсов:
- Сохранение и восстановление состояния: ОС должна сохранить полное состояние текущего процесса/потока (регистры CPU, счетчик команд, состояние стека, память, открытые файлы и т.д.) в памяти, а затем загрузить состояние следующего. Эти операции требуют процессорного времени и использования памяти.
- Планирование (Scheduling): Сам механизм планирования, который определяет, какой процесс или поток будет выполняться следующим, также потребляет CPU-время.
- Кэш-промахи: Переключение между процессами может приводить к инвалидации кэшей CPU (инструкций и данных), что замедляет выполнение, так как данные приходится загружать из более медленной памяти.
Чем чаще происходят переключения контекста, тем выше эти накладные расходы, что снижает долю процессорного времени, выделяемого на полезную работу. В отличие от кооперативной многозадачности, где процессы добровольно отдают управление, вытесняющая многозадачность обеспечивает лучшую отзывчивость и справедливость, но ценой этих накладных расходов.
Ответ 18+ 🔞
А, ну слушай, вот эта вся ваша вытесняющая многозадачность — она, конечно, красавица, отзывчивая, справедливая, но жрёт ресурсы, как не в себя, блядь. Представь: сидит процесс, такой важный, в процессоре, делает свои делишки. А операционка ему — хоп! — и по ебалу! Выметайся нахуй, твой квант времени кончился! Теперь очередь другого.
И вот тут начинается, ёпта, цирк. Чтобы первого не потерять, ОС должна аккуратно, как музейный экспонат, снять с него слепок всего состояния: что в регистрах было, куда он там считал, что в памяти наворотил. Всё это — в оперативку, под сукно. А потом такого же слепка с другого процесса достать, развернуть и впихнуть обратно в процессор. Это ж не хуй собачий — время-то процессорное на это уходит! И память жрёт!
А самое пиздатое — кэши. Процессор-то умный, он данные в быстрый кэш рядом с собой таскает, чтобы быстрее работало. А тут — бац! — контекст сменился. И все эти нагревшиеся, родные данные в кэше теперь новому процессу нахуй не упёрлись. Ему свои надо грузить. Получается, вместо того чтобы считать, процессор пол-времени тупо ждёт, пока данные из медленной памяти подтянутся. Эффективность, блядь, на нуле!
И чем чаще ты эти переключения устраиваешь — тем больше система только и делает, что суетится, как мартышка с гранатой, сохраняя-восстанавливая, вместо полезной работы. В кооперативной-то, старомодной, процесс сам говорил: "Всё, я закончил кусок, берите следующего". Там накладных расходов — ноль. Но зато если процесс мудак и не отдаёт управление — всем пиздец, система встаёт колом. Так что тут, блядь, как всегда: или отзывчивость и справедливость, но плати ресурсами, или экономия, но рискуешь зависнуть наглухо. Ёперный театр, короче.