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