进程与线程

163 阅读2分钟

进程 process

讲概念

  1. 进程是一个程序运行起来的状态。
  2. 进程是操作系统分配资源的基本单位, 比如操作系统 会分配独立的地址空间、内核数据结构(进程描述符号,PCB Process Control Block)、全局变量、数据段等给一个进程。其中,最重要的是进程分配到了独立的内存空间。
  3. 在 linux 中,用一个进程描述符 PCB (Process Control Block) 来跟踪/维护一个进程。
  4. 在 linux 中,用系统调用来创建/启动一个进程,如 fork(创建一个进程,本质上是调用clone这个函数), exec(让进程跑起来)

线程 thread

讲概念

  1. 线程是一个进程中的某个执行路径。一个进程起来以后,它里面可能会有多个执行路径,比如 QQ 进程会有 UI线程负责更新界面,socket线程负责网络连接等。
  2. 线程是操作系统执行调度的基本单位。
  3. 线程共享进程的内存空间,没有自己独立的内存空间。
  4. 线程在不同的操作系统中的实现不太一样。在 linux 中, 线程就是一个普通的进程,只不过这个普通的进程和其他进程共享资源,如内存空间、全局数据等。

进程和线程有什么区别?

  1. 进程是一个程序运行起来的状态,线程是一个进程中的不同的执行路径。
  2. 进程是操作系统分配资源的基本单位,线程是操作系统执行调度的基本单位。 (进程和线程有什么区别, 专业回答)
  3. 进程在 linux 中也被称为 task, 操作系统 会分配独立的地址空间、内核数据结构(进程描述符号,PCB Process Control Block)、全局变量、数据段..给一个进程。其中,进程最重要的是分配到了独立的内存空间。

运行一个程序的流程

  1. 双击 QQ.exe
  2. 调用磁盘控制器,把 QQ 从磁盘中读取出来,通过 IO 总线放到内存里
  3. 数据放到内存以后,形成一个进程。(如果再双击一次 QQ.exe, 那内存里就会再来一个进程)
  4. OS 会给 QQ 这个进程分配资源(内存空间、文件、寄存器),最重要的资源就是内存空间,不同的进程有自己独立的内存空间。
  5. CPU 读取内存中 QQ 进程: 读取指令放到 PC 寄存器里,读取数据放到 Register 里,开始执行。
  6. 开始执行以后就有了线程的概念,QQ 进程里的 main 就是主线程。