1 定义
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配的一个独立单位.
线程是进程的一个实体,是CPU调度和分派的基本单位。
2 关系
一个进程中至少有一个线程(主线程),但是一个进程中也可以创建多个线程。进程不依赖线程,可以独立存在。
线程依赖于进程存在,可以与所属进程中的其他线程共享资源。
3 区别
(1)线程的划分尺度比进程小,一个进程可以被划分为多个线程。
(2)进程拥有独立的内存空间,线程之间共享内存。
(3)进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响;而线程只是一个进程中的不同执行路径,线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉。所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
4 优缺点
进程创建、销毁、切换的开销大;但是有利于资源的管理和保护,一个进程出现故障不会影响其他进程。
线程创建、销毁、切换的开销小;但是一个线程出现故障,其所属的进程就会出现故障,同一个进程中的其他线程也就无法执行。
所以多进程的系统稳定性好,多线程的系统效率高。
5 补充:多线程的资源共享问题
多线程共享以下资源:
(1)堆
(2)静态变量
(3)全局变量
(4)文件等公共资源(使用这些资源的线程必须同步)
多线程不共享以下资源:
(1)栈
(2)寄存器(对应线程的寄存器副本)