我读这个维基百科text片:合作多任务如何工作?
因为合作多任务系统定期依赖于每个进程放弃自己的时间到其他进程在系统上,一个设计不当的程序可以消耗所有的CPU时间本身或导致整个系统挂起。
出于好奇,如何放弃那个时间?这是某种操作系统调用?让我们考虑一下非抢先式的情况,比如光纤或者偶数IO,它们可以协同工作。他们如何放弃那个时间?
借此NodeJS例如:
var fs = require('fs');
fs.readFile('/path/to/file', function(err, data) {});
很明显,我认为该过程不执行任何操作,而它等待数据,但如何V8在这种情况下放弃了时间的其他进程?
让我们假设Linux/Windows作为我们的操作系统。
编辑:我发现谷歌是如何与他们的V8做到这一点。
在Windows他们基本上睡零时间:
void Thread::YieldCPU() {
Sleep(0);
}
而且在Linux他们作出的操作系统调用:
void Thread::YieldCPU() {
sched_yield();
}
的
sched.h
。
内核是否决定哪个进程应该“放弃时间”? – Hannesh
@Hannesh:这是抢先的多任务处理。 – sharptooth