linux的“假”线程
先说一句废话:线程是在进程内部运行的一个执行分支。
这是现在大多数计算机书籍对线程概念的描述。然而,对大多数人来说(比如我),仍然不(yi)知(lian)所(meng)云(bi)。
为了深刻理解这句话背后的含义,我们先来看一张图:
我们知道,vfork函数是用来创建子进程的。且该函数创建出的子进程与父进程共用一个地址空间。
所以,可以将父进程中的代码和函数分解,并分别交给这些子进程并行执行。这种方式相较于普通进程执行的方案更为高效。
事实上,我们可以将这些子进程看作线程,而把上图中的father和child统称为一个进程。这样,我们就可以知道线程在进程和OS中扮演的角色。
那为什么说linux的线程是“假”的呢?
这是因为在linux中,线程和进程共用了一种数据结构(task_struct)。也就是说,linux并没有为线程设计另外的数据结构。linux中的线程是由进程模拟的。所以,linux中没有真正意义上的线程,相当于“假”的线程。
注:windows操作系统中,线程就是真正意义上的线