背景
- 线程,是cpu调度的基本单位
- 进程,是系统资源分配的基本单位
tips: 上述两种解释是两者之间的本质区别
考虑因素
这里的考虑因素是指在何种情况下,使用线程或进程。
- 并发性
在考虑到并发性时,需要考虑到切换效率(线程>进程),本质上是关注上下文的切换 - 内存
进程具有独立的虚拟地址空间,而线程是没有的,是共享所属进程的虚拟地址空间,有栈、PC(program counter)、本地存储等独立空间。 - 所属关系
一个线程属于一个进程,一个进程可以拥有多个线程 - 健壮性
线程需要更加关注健壮性,而进程而
tips:
- 上下文切换所指的上下文是表示线程/进程运行时的现场环境的记录:
- 系统环境:cpu,寄存器,程序计数器(PC)
- 用户空间信息:内核空间,pcb
进程进行上下文切换时,需要将上述两个信息进行记录;而对于同一进程的线程只需要记录系统环境的信息,而不同进程的线程仍需将两个信息进行记录。
- 独立的虚拟地址空间意味着进程的运行环境是隔离运行的,即使部分进程异常停止了,其他进程仍会继续运行,部分异常进程会被重新运行(如nginx)。另一方面,也说明了若使用多线程则需要考虑共享资源的问题,也就是需要进行加锁解锁来保证不同线程的正常运行。