线程与进程的联系与区别:
进程的概念:
进程又称作任务,进程就是一个运行中程序的描述-pcb(进程控制块),linux下的pcb实际上是一个结构体,tack_struct结构体,描述一个程序的各种信息。对于操作系统来说,进程就是一个pcb,操作系统对这个运行中程序的描述来控制这个程序的运行过程,所以,进程就是一个pcb.
线程的概念:
Linux下线程是一个轻量级进程,是通过进程pcb描述实现的(在传统的操作系统中pcb就是一个进程,tack_struct结构体,描述一个程序的运行),并且同一个线程组(进程)中的线程共用同一个虚拟地址空间,因此linux下的pcb相较于传统的pcb更加轻量化,因此叫轻量级进程。
注意:
- 在linux下,进程晋升为组的概念。所以进程就是线程组。
- 线程是cpu资源调度的基本单位,进程是操作系统资源分配的基本单位。cpu调度一个程序的运行是通过pcb调度的(调度线程处理任务),而资源分配是以线程组(进程)为单位分配给整个线程组(线程组共用一个虚拟地址空间)
进程与线程的联系与区别
1. 进程间的切换开销大,线程的切换开销小
每一个进程都有自己独立的虚拟地址空间和程序上下文,程序之间的切换会有较大的的开销。而linux下的线程,是轻量化的,因为多个线程共用进程的虚拟堵住空间,实现数据的共享。当然每一个线程也都有自己独立的栈空间等等,但是线程之间的切换开销小
程序间切换的开销:
- 程序计数器得更新记录每个程序下一句要执行指令。因为在CPU调度切换的时候,需要将上一次指令运行的地方记录下来。
- 上下文数据的更新。上一次处理的数据还要更新
- 记账信息的更新。记录这个进程在CPU上执行的时间
- 有可能要需要更新其他信息,如IO信息,内存指针的位置,寄存器内容,环境变量等等
线程间切换的开销:
栈开销,程序计数器等等。
每一次切换的更新又称作上下文数据的更新。
总结:可以看出来线程间开销所消耗的就是进程间开销的子集。线程间切换调度的上下文明显要小于进程间切换的开销。
2. 进程调度着多个线程一起运行
在操作系统中同时可以运行多个进程(比如你在听着歌,打着游戏,这都至少两个进程),而在同一个进程中有多个线程同时执行(通过CPU的调度,每一个时间片中只有一个线程执行)
3. 内存地址空间分配上
内存分配上,系统在运行上会为每一个进程分配不同的内存空间,即进程的虚拟地址空间。而对线程而言,线程组所共享的就是进程的资源,所以进程也叫做线程组。