零螺纹工艺?
进程是否必须至少包含一个线程? 进程是否可能没有任何线程,或者这没有意义?
一个进程通常至少有一个线程。 维基百科有以下定义:
执行线程是可由操作系统调度的最小处理单元。 线程和进程的实现因操作系统而异,但在大多数情况下,线程包含在进程内。
MSDN支持这个:
处理器执行线程而不是进程,因此每个应用程序至少有一个进程,并且进程始终至少有一个执行线程,称为主线程。
虽然它确实继续说:
一个过程可以有零个或多个单线程公寓和零个或多个multithreading公寓。
这意味着如果单线程公寓和multithreading公寓的数量都可以为零。 但是,这个过程不会做太多:)
您可以选择不使用显式线程库,也可以选择不使用线程概念的操作系统(因此不会将其称为线程),但对于大多数现代编程,所有程序至少都有一个执行线程(通常是指作为主线程或UI线程或类似的)。 如果退出,那么这个过程也是如此。
思考实验:零线程执行的进程会做什么?
在类Unix操作系统中,可能有一个僵尸进程 ,即使没有(更长)任何线程,进程表中仍然存在一个条目。
理论上,我不明白为什么不。 但是流行的操作系统是不可能的。
流程通常由几个不同的部分组成:
- 主题
- 记忆空间
- 文件描述符
- 环境(根目录,当前目录等)
- 特权(UID等)
- 等等
理论上,一个进程可以存在,没有线程作为RPC服务器。 其他进程会进行RPC调用,在服务器进程中生成线程,然后线程在函数返回时消失。 我不知道任何以这种方式工作的操作系统。
在大多数操作系统上,进程在最后一个线程退出时退出,或者在主线程退出时退出。
注意:这忽略了“无用”的情况,例如僵尸进程,它们没有线程但没有做任何事情。
“主要”本身就是线程。 它是一个被执行的线程。 因此,每个进程至少在一个线程上运行。