Я прочитал эту Википедию текст срез:
Поскольку кооперативная многозадачная система регулярно полагается на каждый процесс отдавая время другим процессам в системе, одна плохо спроектированная программа может потреблять все время ЦП для себя или вызывать зависание всей системы.
Из любопытства, как человек бросает это время? Это какой-то вызов ОС? Давайте подумаем о случаях без вытеснения, таких как волокна или четные операции ввода-вывода, которые выполняют совместную многозадачность. Как они сдаются в это время?
Возьми это NodeJS пример:
var fs = require('fs');
fs.readFile('/path/to/file', function(err, data) {});
Для меня очевидно, что процесс ничего не делает, пока ожидает данные, но как V8 в этом случае отдает время другим процессам?
Давайте предположим, что нашей ОС является Linux / Windows.
Редактировать: я узнал, как Google делает это с их V8.
На Windows они в основном спят нулевое время:
void Thread::YieldCPU() {
Sleep(0);
}
И в Linux они делают вызов ОС:
void Thread::YieldCPU() {
sched_yield();
}
из sched.h
.