Я прочитал этот фрагмент текста в Википедии:
Поскольку совместная многозадачная система полагается на каждый процесс регулярно , отдавая время другим процессы в системе, одна плохо спроектированная программа может занять все время процессора для себя или привести к зависанию всей системы.
Из любопытства, как можно отказаться от этого времени? Это какой-то вызов ОС? Давайте подумаем о случаях без вытеснения, таких как оптоволокно или даже организованный ввод-вывод, которые выполняют совместную многозадачность. Как они отказываются от этого времени?
Возьмем этот пример 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
.