Введение
Компьютерная многозадачность, которая не упреждает процессы Кооперативная многозадачность, также известная как не упреждающая многозадачность, является стилем компьютерной многозадачности, в котором операционная система никогда не инициирует переключение контекста от работающего процесса к другому процессу. Вместо этого, для того, чтобы одновременно запускать несколько приложений, процессы добровольно сдают контроль периодически или когда они находятся в состоянии холостого хода или логически заблокированы. Этот тип многозадачности называется кооперативным, потому что все программы должны сотрудничать, чтобы схема планирования работала. В этой схеме планировщик процессов операционной системы известен как кооперативный планировщик, роль которого ограничивается запуском процессов и предоставлением им возможности добровольно вернуть контроль. Это связано с асинхронным подходом к программированию.
Cooperative multitasking, also known as non preemptive multitasking, is a style of computer multitasking in which the operating system never initiates a context switch from a running process to another process. Instead, in order to run multiple applications concurrently, processes voluntarily yield control periodically or when idle or logically blocked. This type of multitasking is called cooperative because all programs must cooperate for the scheduling scheme to work. In this scheme, the process scheduler of an operating system is known as a cooperative scheduler whose role is limited to starting the processes and letting them return control back to it voluntarily. This is related to the asynchronous programming approach.
Использование
Хотя он редко используется в качестве основного механизма планирования в современных операционных системах, он широко используется в встроенных системах с ограниченной памятью, а также в конкретных приложениях, таких как CICS или подсистема JES2. Кооперативная многозадачность была основной схемой планирования для 16-битных приложений, используемых Microsoft Windows до Windows 95 и Windows NT, а также классической Mac OS. Windows 9x использовала непревентивную многозадачность для 16-битовых устаревших приложений, а версии PowerPC Mac OS X до Leopard использовали ее для классических приложений. Кооперативная многозадачность похожа на асинхронное ожидание в языках, таких как JavaScript или Python, которые имеют одну поточную петлю событий в своем времени выполнения. Это контрастирует с кооперативной многозадачностью в том, что await не может быть вызвана из не асинхронной функции, а только асинхронной функции, которая является своего рода coroutine. Кооперативная многозадачность позволяет намного упростить реализацию приложений, потому что их выполнение никогда не прерывается планировщиком процессов; например, различные функции внутри приложения не должны быть повторно включенными.