CPU进程是否至少有一个线程?

时间:2011-02-04 04:36:05

标签: process cpu

我知道线程用于多任务处理并且重量轻。但我怀疑的是,我需要一个没有任何多任务处理的流程。我刚刚创建了一个流程。现在CPU会将单个线程关联到进程,还是单独执行进程而不需要有线程?

请澄清。

此致 哈里什

2 个答案:

答案 0 :(得分:11)

嗯,这取决于您所谈论的操作系统,但对于许多人来说,创建流程包括为该流程创建单个线程的行为。

然后该线程可以自由创建属于该进程的其他线程。

谈论没有线程的进程是没有意义的,因为这意味着没有代码为该进程运行,因此它无法真正做任何有用的事情。


例如,在Linux内核中,创建进程与创建新线程几乎没有什么不同。那是因为内核调度线程而不是进程。

进程现在被认为是具有相同线程组ID(TGID)的线程组,TGID是为该进程创建的第一个线程的线程ID(TID)。

当您forkvforkclone(没有CLONE_THREAD)时,您会获得一个带有新TID的新线程,并且TGID设置为该TID - 这是一个新的过程。

cloneCLONE_THREAD一起使用时,您会获得一个带有新TID的新线程,但TGID仍然与您的克隆者相同。这是同一过程中的另一个主题。

这就是Linux(作为示例)如何区分进程和线程而不必使调度程序过于复杂。如果愿意,调度程序可以选择完全忽略线程组。它实际上非常聪明。

要在调度程序外部进行编码,具有相同TGID的一组线程将被视为一个进程。

这包括用户空间代码内核的其他位,例如,线程如何分组到进程中会影响信号传递和退出代码等。

答案 1 :(得分:2)

一个过程 - 是一个线程。

当一个过程开始时,它以一个线程开始。

在多线程之前,术语线程是不必要的,因为你没有一个包含多个线程的进程。

现在,您可以创建其他线程,因此可以创建具有多个线程的进程。

进程也是一堆其他东西 - 内存,堆栈,whathaveyou;其中一个是线程。线程共享进程中的其他一些东西(例如内存),但是拥有自己的其他实例(例如堆栈)。