leí este Wikipedia text rebanada:¿Cómo funciona la multitarea cooperativa?
Debido a un sistema cooperativo multitarea se basa en cada proceso regular renunciar a tiempo a otros procesos en el sistema, un programa mal diseñado puede consumir todo el tiempo de CPU por sí mismo o hacer que todo el sistema se cuelgue.
Por curiosidad, ¿cómo renunciar a ese momento? ¿Es esto una especie de llamada al sistema operativo? Pensemos en casos no preventivos como fibras o IO con efecto que hacen multitarea cooperativa. ¿Cómo abandonan ese tiempo?
Tome este NodeJS ejemplo:
var fs = require('fs');
fs.readFile('/path/to/file', function(err, data) {});
Es obvio que el proceso no hace nada mientras está a la espera de los datos, pero ¿cómo V8 en este caso se dio por vencido el tiempo para otros procesos?
Supongamos que Linux/Windows es nuestro sistema operativo.
Editar: Descubrí cómo Google está haciendo esto con su V8.
En Windows que básicamente dormir tiempo cero:
void Thread::YieldCPU() {
Sleep(0);
}
Y en Linux que realizar una llamada de sistema operativo:
void Thread::YieldCPU() {
sched_yield();
}
de sched.h
.
¿El núcleo no decide qué proceso debería "dar tiempo"? – Hannesh
@Hannesh: Eso es multitarea preventiva. – sharptooth