进程 process
讲概念
- 进程是一个程序运行起来的状态。
- 进程是操作系统分配资源的基本单位, 比如操作系统 会分配
独立的地址空间、内核数据结构(进程描述符号,PCB Process Control Block)、全局变量、数据段等给一个进程。其中,最重要的是进程分配到了独立的内存空间。 - 在 linux 中,用一个进程描述符 PCB (Process Control Block) 来跟踪/维护一个进程。
- 在 linux 中,用
系统调用来创建/启动一个进程,如 fork(创建一个进程,本质上是调用clone这个函数), exec(让进程跑起来)
线程 thread
讲概念
- 线程是一个进程中的某个执行路径。一个进程起来以后,它里面可能会有多个执行路径,比如 QQ 进程会有 UI线程负责更新界面,socket线程负责网络连接等。
- 线程是操作系统执行调度的基本单位。
- 线程共享进程的内存空间,没有自己独立的内存空间。
- 线程在不同的操作系统中的实现不太一样。在 linux 中, 线程就是一个普通的进程,只不过这个普通的进程和其他进程共享资源,如内存空间、全局数据等。
进程和线程有什么区别?
- 进程是一个程序运行起来的状态,线程是一个进程中的不同的执行路径。
- 进程是操作系统分配资源的基本单位,线程是操作系统执行调度的基本单位。 (进程和线程有什么区别, 专业回答)
- 进程在 linux 中也被称为 task, 操作系统 会分配
独立的地址空间、内核数据结构(进程描述符号,PCB Process Control Block)、全局变量、数据段..给一个进程。其中,进程最重要的是分配到了独立的内存空间。
运行一个程序的流程
- 双击 QQ.exe
- 调用磁盘控制器,把 QQ 从磁盘中读取出来,通过 IO 总线放到内存里
- 数据放到内存以后,形成一个进程。(如果再双击一次 QQ.exe, 那内存里就会再来一个进程)
- OS 会给 QQ 这个进程分配资源(内存空间、文件、寄存器),最重要的资源就是内存空间,不同的进程有自己独立的内存空间。
- CPU 读取内存中 QQ 进程: 读取指令放到 PC 寄存器里,读取数据放到 Register 里,开始执行。
- 开始执行以后就有了线程的概念,QQ 进程里的 main 就是主线程。