在书上看到一段这样的话:
在kernel 2.6中时间片的计算是分散的,具体的计算时间可以用task_timeslice(),也可以用其他方法。
a.进程创建时,将父进程的时间片分一半给子进程,同时父进程的时间片减半。
b.进程用完时间片以后,需要重新计算时间片,并将进程插入到相应的运行队列。
c.进程退出时,根据first_timeslice的值来决定是否将子进程的时间片返还给父进程。
疑问:对于a,子进程的时间片是从父进程那里分得的,也就是说其实父进程也是有时间去完成子进程的任务,那干脆就不用创建子进程咯。子进程分父进程的时间片,那又何来创建进程可以增加机器的并行性呢?
对于b,这个“重新计算时间片”是不是摆脱了子进程从父进程那里分得时间片的限制,父子进程的时间片是否还有着某种关系呢?
对于多核的机器,子进程和父进程的时间片划分又是怎么样的呢?多核间如何协调时间片的长短?
a. 多進程必然佔用較多資源,大那師們搞出這樣的設計幹什麼?因為不同的進程可以執行不同類型的任務,例如,一個在訪問磁碟,一個在處理TCP鏈接,互不相干,多進程最擅長這樣的領域。
b. 一定要擺脫父行程,推理一下就行了,OS不會這麼笨,資源只有在被合理使用時才有價值(又想吐槽給手機貼膜的人了)。
c. 時間片怎麼分?不同的OS有不同的演算法,有的盡量公平,有的分輕重緩急,保證盡快完成任務的演算法就是好演算法。另外,只有多核心才能實現真正的並行,也就是說,就算兩個進程類型一致,就是同時都要使用CPU也不怕,反正有兩個以上的核心給它們分著用,同時用。