进程是组织资源的最小单位,而线程是安排CPU执行的最小单位。
其实在一个进程中多个线程并行和在操作系统中多个进程并行非常类似,只是线程共享的是地址空间,而进程共享的是物理内存,打印机,键盘等资源……
每一个进程和线程所独自占有的资源如表1所示。
进程占有的资源 | 线程占有的资源 |
地址空间 全局变量 打开的文件 子进程 信号量 账户信息 | 栈 寄存器 状态 程序计数器 |
其中,线程可以共享进程独占的资源。
我们常用的术语“多线程”一般指的是在同一个进程中多个线程的并发执行。
在多线程的进程中,每个线程轮流使用CPU,因此实际上线程并不是并行的,但从宏观上看,是并行的。
在多线程模型中,每一个进程初始创建时只有一个线程。这个线程可以通过调用系统的库函数去创建其它线程。线程创建的线程并必须要为其指定地址,因为新的线程自动在创建它的地址空间内工作。虽然一个线程可以创建另一个线程,但通常来讲,线程之间是并列的,并不存在层级关系。
当一个进程完成其工作后,可以通过调用系统库函数进行销毁。
在操作系统中,线程可以实现在用户模式下,也可以实现在内核模式下,也可以两者结合实现。