在书上看到一段这样的话:
在kernel 2.6中时间片的计算是分散的,具体的计算时间可以用task_timeslice(),也可以用其他方法。
a.进程创建时,将父进程的时间片分一半给子进程,同时父进程的时间片减半。
b.进程用完时间片以后,需要重新计算时间片,并将进程插入到相应的运行队列。
c.进程退出时,根据first_timeslice的值来决定是否将子进程的时间片返还给父进程。
疑问:对于a,子进程的时间片是从父进程那里分得的,也就是说其实父进程也是有时间去完成子进程的任务,那干脆就不用创建子进程咯。子进程分父进程的时间片,那又何来创建进程可以增加机器的并行性呢?
对于b,这个“重新计算时间片”是不是摆脱了子进程从父进程那里分得时间片的限制,父子进程的时间片是否还有着某种关系呢?
对于多核的机器,子进程和父进程的时间片划分又是怎么样的呢?多核间如何协调时间片的长短?
a. 多进程必然占用较多资源,大那师们搞出这样的设计干什么?因为不同的进程可以执行不同类型的任务,比如,一个在访问磁盘,一个在处理TCP链接,互不相干,多进程最擅长这样的领域。
b. 肯定要摆脱父进程,推理一下就行了,OS不会这么笨,资源只有在被合理使用时才有价值(又想吐槽给手机贴膜的人了)。
c. 时间片怎么分?不同的OS有不同的算法,有的尽量公平,有的分轻重缓急,保证尽快完成任务的算法就是好算法。另外,只有多核才能实现真正的并行,也就是说,就算两个进程类型一致,就是同时都要使用CPU也不怕,反正有两个以上的核心给它们分着用,同时用。