线程&进程

线程&进程

进程

程序执行的一个实例,表示一个正在运行的程序,是系统进行资源分配的基本单元,拥有一个完整的虚拟地址空间。

线程

轻量级进程,程序执行的最小单元,是进程里面的一个实体,线程与资源分配无关,线程自己不拥有资源(只有少量寄存器、栈、线程控制表TCB),线程依赖进程,并与进程内其他线程共享资源。

区别

调度:线程是程序调度、分配的基本单位,而进程拥有资源,各司其职,显著的提高系统的并发运行。同一个进程中,线程切换,进程不需要切换,而进程切换,线程也必须切换。线程切换只需要保存自己的寄存器以及堆栈数据,线程切换还需要分配新的资源。
并发性:进程之间可以并发,一个进程内的多个线程亦可并发,利用好线程的并发性可以更好地利用资源
资源:线程只拥有少量资源(寄存器、栈),但可以使用进程的资源
系统开销:进程切换开销大于线程切换的开销(进程:切换虚拟地址空间、切换CPU上下文、切换内核栈 线程:切换CPU上下文、切换内核栈)
通信方式:进程间通信需要通过IPC(本身也是一个程序),而线程间通信只是简单的读写数据段。进程资源互不影响,而线程资源则要考虑同步、互斥的问题

1
2
3
4
页表可以将虚拟地址转换为物理内存地址,页表查找很慢,通常使用缓存来加快查找,切换进程,意味着虚拟内存切换、页表切换,从而导致缓存命中率低,查找变慢 

页表: 类似于字典一个虚拟地址对应一个物理地址,真实机制没搞懂
虚实地址的映射关系是通过页表来描述的,而mmu正是通过页表来查找虚地址所对应的物理地址。

进程的上下文切换不仅包含了虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的资源。

我自己理解的线程&进程

进程就是正在执行的程序,线程就是这个程序的最小执行单元,一个进程通常拥有多个线程。进程拥有独立的资源以及虚拟地址空间,而线程只拥有寄存器、栈等少量资源,但进程内部的线程可以共享进程的资源,包括虚拟内存地址。

为什么进程切换比线程切换耗资源

  • 线程切换就是栈、寄存器的切换。
  • 进程的切换不仅包含了虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的资源。