czytam ten Wikipedia text kawałek:Jak działa wielozadaniowość kooperacyjna?
Ponieważ wspólnie multitasked system opiera się na każdym procesie regularnie rezygnując czas do innych procesów w systemie, jeden źle zaprojektowany program może zużywać cały czas procesora dla siebie lub spowodować zawieszenie całego systemu.
Z ciekawości, jak zrezygnować z tego czasu? Czy to jest jakieś wywołanie systemu operacyjnego? Pomyślmy o przypadkach nieprzyjmujących, takich jak włókna lub zdarzenia IO, które prowadzą do wielozadaniowości kooperacyjnej. Jak oni rezygnują z tego czasu?
Take this NodeJS przykład:
var fs = require('fs');
fs.readFile('/path/to/file', function(err, data) {});
Jest dla mnie oczywiste, że proces ten nie robi nic, podczas gdy jest to oczekiwanie na dane, ale jak V8 w tym przypadku zrezygnować czas dla innych procesów?
Załóżmy, że Linux/Windows jest naszym systemem operacyjnym.
Edytuj: Dowiedziałem się, jak Google robi to z V8.
Na Windows oni spać w zasadzie zerowy czas:
void Thread::YieldCPU() {
Sleep(0);
}
I na Linux one wykonanie połączenia OS:
void Thread::YieldCPU() {
sched_yield();
}
z sched.h
.
Czy jądro nie decyduje, który proces powinien "poświęcić czas"? – Hannesh
@Hannesh: To wielozadaniowość zapobiegawcza. – sharptooth