零螺纹工艺?

进程是否必须至少包含一个线程? 进程是否可能没有任何线程,或者这没有意义?

一个进程通常至少有一个线程。 维基百科有以下定义:

执行线程是可由操作系统调度的最小处理单元。 线程和进程的实现因操作系统而异,但在大多数情况下,线程包含在进程内。

MSDN支持这个:

处理器执行线程而不是进程,因此每个应用程序至少有一个进程,并且进程始终至少有一个执行线程,称为主线程。

虽然它确实继续说:

一个过程可以有零个或多个单线程公寓和零个或多个multithreading公寓。

这意味着如果单线程公寓和multithreading公寓的数量都可以为零。 但是,这个过程不会做太多:)

您可以选择不使用显式线程库,也可以选择不使用线程概念的操作系统(因此不会将其称为线程),但对于大多数现代编程,所有程序至少都有一个执行线程(通常是指作为主线程或UI线程或类似的)。 如果退出,那么这个过程也是如此。

思考实验:零线程执行的进程会做什么?

在类Unix操作系统中,可能有一个僵尸进程 ,即使没有(更长)任何线程,进程表中仍然存在一个条目。

理论上,我不明白为什么不。 但是流行的操作系统是不可能的。

流程通常由几个不同的部分组成:

  • 主题
  • 记忆空间
  • 文件描述符
  • 环境(根目录,当前目录等)
  • 特权(UID等)
  • 等等

理论上,一个进程可以存在,没有线程作为RPC服务器。 其他进程会进行RPC调用,在服务器进程中生成线程,然后线程在函数返回时消失。 我不知道任何以这种方式工作的操作系统。

在大多数操作系统上,进程在最后一个线程退出时退出,或者在主线程退出时退出。

注意:这忽略了“无用”的情况,例如僵尸进程,它们没有线程但没有任何事情。

“主要”本身就是线程。 它是一个被执行的线程。 因此,每个进程至少在一个线程上运行。