gpt4 book ai didi

multithreading - 一个CPU进程总是至少有一个线程吗?

转载 作者:行者123 更新时间:2023-12-02 07:20:37 26 4
gpt4 key购买 nike

我知道线程用于多任务处理,而且它们是轻量级的。

假设我需要一个没有任何多任务处理的流程。如果我只是创建一个进程,CPU 会将单个线程关联到该进程还是会单独执行该进程而不需要线程?

最佳答案

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

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

谈论没有线程的进程没有什么意义,因为这意味着没有代码为该进程运行,因此它不能真正做任何有用的事情。 其中它无法做的事情就是为该进程创建第一个线程(如果您希望它执行任何有用的工作:-)

<小时/>

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

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

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

当您使用CLONE_THREAD进行克隆时,您将获得一个具有新TID的新线程,但TGID仍与您的克隆者相同。这是同一进程中的不同线程。

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

对于调度程序之外的代码,具有相同 TGID 的一组线程被视为一个进程(TGID 就是该代码所看到的进程 ID)。

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

关于multithreading - 一个CPU进程总是至少有一个线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4894609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com