Выход : поток вызывает функцию в планировщике, которая потенциально «паркует» этот поток и запускает другой.Другой поток - тот, который раньше называл yield, а теперь, похоже, возвращается из него.Многие функции могут иметь выходную семантику, например, чтение с устройства.
Preempt : в систему поступает внешнее событие: какое-то прерывание (часы, поступление сетевых данных, дисковый ввод-вывод).О завершение ...).Какой-либо поток, работающий в это время, приостанавливается, и на компьютере работает операционная система, кодирующая контекст прерывания.Когда прерывание обслуживается и пора возвращаться из прерывания, может быть принято решение о планировании, чтобы оставить прерванный поток запаркованным и вместо этого возобновить другой.Это упреждение.Если / когда этот исходный поток снова запустится, будет активирован контекст, который был сохранен прерыванием, и он будет точно выбран там, где остановился.
Системы планирования, которые полагаются исключительно на yield, называются «кооперативными»."или" кооперативная многозадачность ", а не" упреждающий ".
Традиционный (читай: старый, 1970-х и 80-х) Unix является многозадачным в ядре с вытесняющим пользовательским пространством.Процедурам ядра доверяют, чтобы дать в разумные сроки, и поэтому при запуске кода ядра вытеснение отключено.Это значительно упрощает кодирование ядра и повышает надежность за счет производительности, особенно при использовании нескольких процессоров.Linux был таким много лет.