Ответ
Кооперативная многозадачность требует, чтобы процессы добровольно отдавали управление (например, через yield). Если процесс завис, вся система блокируется. Пример в Go — горутины до Go 1.14 (кооперативные через вызовы функций).
Вытесняющая многозадачность позволяет ОС/рантайму принудительно переключать контекст, даже если процесс не готов. Современные горутины в Go (с версии 1.14) используют вытеснение на уровне сигналов ОС или отметок времени.
Пример кооперативности (псевдокод):
func task1() {
for {
// работа
yield() // явная передача управления
}
}
Вытеснение избавляет от необходимости ручного управления, но сложнее в реализации.