В чем разница между кооперативной многозадачностью и вытесняющей многозадачностью? - PullRequest
0 голосов
/ 16 апреля 2019

Недавно я понял, как нити отличаются от волокон. Этот ответ говорит о том, что

Потоки используют упреждающее планирование, тогда как волокна используют кооперативное планирование.

Для получения дополнительной информации о совместной многозадачностиПротив упреждающей многозадачности нет конкретного поста на SO.Надеюсь, что этот вопрос будет полезен для получения всей информации по теме.

1 Ответ

2 голосов
/ 16 апреля 2019

Краткий ответ:

Приоритет: поток не решает, когда ему запускаться, и вынужден делить процессор

Кооператив: каждый поток при запуске решает, как долго сохранять процессор,и когда он отдает его, чтобы другой поток мог использовать его.

Длинный ответ

Упреждающий

означает, что потоки не контролируют, когда и/ или как долго они будут использовать процессор и работать.Именно планировщик (компонент ОС) в любой момент решает, какой поток может работать, а какой - в спящем режиме.У вас нет четких гарантий относительно того, что будет в следующий раз, когда поток будет запущен, и как долго.Это полностью зависит от планировщика.

Кооператив

В совместной многозадачности происходит то, что планировщик не может сказать, когда поток может работать.Каждый поток решает, как долго он хранит процессор.Если было решено не использовать процессор совместно с каким-либо другим потоком, другие потоки не запустятся, вызывая так называемое голодание .

Обратите внимание, что остановка одного потока и запуск другого приводит к определенномусумма накладных расходов.Это означает, что вы тратите время и ресурсы не на выполнение кода из ваших задач, а исключительно ради того, чтобы разрешить это совместное использование ЦП.В некоторых сценариях в реальном времени это может быть совершенно неприемлемо.

...