首先要明确的是,按照Linux Kernel Development 2里面的说法,LINUX和其他OS 比如WINDOWS, SOLARIS之间一个很大的不同是没有严格定义的线程(thread)。那么你也许会问,如果LINUX中没有线程,那么如何来表示类似WINDOWS 线程的那种执行观念呢?答案是LINUX中,PROCESS(进程)可以当作线程。
那么你也许又会问,WINDOWS中的多线程程序在LINUX中是怎样表示的呢?具体来说,LINUX中的PROCESS有2种。一种是独立的 PROCESS。自己有自己的地址空间,资源列表,代码等。另外一种PROCESS是和其他PROCESS共享一个地址空间,资源列表的。这种 PROCESS就类似于WINDOWS中的线程。
为了避免将linux process与广义上的进程,线程搞混,我们称之为task 好了(事实上 linus 也是这么叫的)
在linux 系统(2.6)中,每个核(core)都拥有一个运行队列。运行队列中的task 按照CFS 调度算法进行调度。
为了实现不同核的 负载均衡,会把一个任务从负载高的核迁移到负载低的核。