17.1 进程与线程
大多数多线程讨论中都会涉及到两个核心概念:进程和线程,了解它们的区别非常重要。
进程是是一种承载了运行时信息和资源的资源容器。进程包含如下内容:
- 地址空间,一部分地址被程序代码,数据,共享库,映射的文件等等所填充。一部分地址还可以和其它进程所共享。
- 所有相关类型的状态信息,例如打开的文件描述符,寄存器等等。
- 进程 ID ,进程组 ID,用户 ID,用户组 ID ...
- 其它用于进程间通信的资源,例如管道,信号量,消息队列...
线程是能够被操作系统调度执行的指令流。
操作系统不会调度进程,而是调度线程。每一个线程都作为进程的一部分并持有线程自身的一些状态:
- 寄存器。
- 栈(从技术角度来讲,栈是被栈指针寄存器所定义的;然而由于所有进程的线程都共享相同的地址空间,某个线程是可以访问其它线程的栈的,尽管这样并不是什么好做法)。
- 对于调度器来说一些较重要的属性,例如优先级。
- 等待中和被阻塞的信号。
- 信号 mask。
进程被关闭的时候,所有相关的资源都会被释放,包括线程和打开的文件描述符等等。