17.1 进程与线程

大多数多线程讨论中都会涉及到两个核心概念:进程和线程,了解它们的区别非常重要。

进程是是一种承载了运行时信息和资源的资源容器。进程包含如下内容:

  • 地址空间,一部分地址被程序代码,数据,共享库,映射的文件等等所填充。一部分地址还可以和其它进程所共享。
  • 所有相关类型的状态信息,例如打开的文件描述符,寄存器等等。
  • 进程 ID ,进程组 ID,用户 ID,用户组 ID ...
  • 其它用于进程间通信的资源,例如管道,信号量,消息队列...

线程是能够被操作系统调度执行的指令流。

操作系统不会调度进程,而是调度线程。每一个线程都作为进程的一部分并持有线程自身的一些状态:

  • 寄存器。
  • 栈(从技术角度来讲,栈是被栈指针寄存器所定义的;然而由于所有进程的线程都共享相同的地址空间,某个线程是可以访问其它线程的栈的,尽管这样并不是什么好做法)。
  • 对于调度器来说一些较重要的属性,例如优先级。
  • 等待中和被阻塞的信号。
  • 信号 mask。

进程被关闭的时候,所有相关的资源都会被释放,包括线程和打开的文件描述符等等。

results matching ""

    No results matching ""