【Linux】进程与线程的联系与区别

线程与进程的联系与区别:

进程的概念:

进程又称作任务,进程就是一个运行中程序的描述-pcb(进程控制块),linux下的pcb实际上是一个结构体,tack_struct结构体,描述一个程序的各种信息。对于操作系统来说,进程就是一个pcb,操作系统对这个运行中程序的描述来控制这个程序的运行过程,所以,进程就是一个pcb.

线程的概念:

Linux下线程是一个轻量级进程,是通过进程pcb描述实现的(在传统的操作系统中pcb就是一个进程,tack_struct结构体,描述一个程序的运行),并且同一个线程组(进程)中的线程共用同一个虚拟地址空间,因此linux下的pcb相较于传统的pcb更加轻量化,因此叫轻量级进程。

注意

  1. 在linux下,进程晋升为组的概念。所以进程就是线程组。
  2. 线程是cpu资源调度的基本单位,进程是操作系统资源分配的基本单位。cpu调度一个程序的运行是通过pcb调度的(调度线程处理任务),而资源分配是以线程组(进程)为单位分配给整个线程组(线程组共用一个虚拟地址空间)

进程与线程的联系与区别

1. 进程间的切换开销大,线程的切换开销小

每一个进程都有自己独立的虚拟地址空间和程序上下文,程序之间的切换会有较大的的开销。而linux下的线程,是轻量化的,因为多个线程共用进程的虚拟堵住空间,实现数据的共享。当然每一个线程也都有自己独立的栈空间等等,但是线程之间的切换开销小

程序间切换的开销

  1. 程序计数器得更新记录每个程序下一句要执行指令。因为在CPU调度切换的时候,需要将上一次指令运行的地方记录下来。
  2. 上下文数据的更新。上一次处理的数据还要更新
  3. 记账信息的更新。记录这个进程在CPU上执行的时间
  4. 有可能要需要更新其他信息,如IO信息,内存指针的位置,寄存器内容,环境变量等等

线程间切换的开销
栈开销,程序计数器等等。

每一次切换的更新又称作上下文数据的更新。
总结:可以看出来线程间开销所消耗的就是进程间开销的子集。线程间切换调度的上下文明显要小于进程间切换的开销

2. 进程调度着多个线程一起运行

在操作系统中同时可以运行多个进程(比如你在听着歌,打着游戏,这都至少两个进程),而在同一个进程中有多个线程同时执行(通过CPU的调度,每一个时间片中只有一个线程执行)

3. 内存地址空间分配上

内存分配上,系统在运行上会为每一个进程分配不同的内存空间,即进程的虚拟地址空间。而对线程而言,线程组所共享的就是进程的资源,所以进程也叫做线程组。

猜你喜欢

转载自blog.csdn.net/weixin_43939593/article/details/105937067