进程是具有独立功能的程序,是系统资源分配的单位;线程是进程的一个实体,是CPU调度(程序执行)的单位,自己不拥有系统资源。同一进程的线程共享该进程所有资源,线程在执行过程中,需要协作同步。
进程包括 线程、内存、文件/网络句柄
线程包括 栈、PC(程序计数器)、TLS(Thread local storage)(分配内存、存放变量)
并发性:进程和线程都可以。
优劣:
- 线程之间通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式进行。
- 线程的调度与切换比进程快很多,成本也小
- 多进程(允许多个任务同时执行)更健壮,多线程(允许单个任务分成不同的部分执行)程序只要一个线程死掉,整个进程也死掉,而一个进程死掉并不会对另一个进程造成影响,因为进程有自己独立地址空间。
进程与线程的一个简单解释: 进程与线程的一个简单解释 - 阮一峰的网络日志
延伸问题:
1.如何通信,沟通的内容
进程/线程如何通信
进程可以通过管道、套接字、信号交互、共享内存、消息队列等等进行通信;而线程本身就会共享内存,指针指向同一个内容,交互很容易。
- 如何同步,协调的内容 进程调度、线程同步
- 内存问题
进程要分配内存,开销很大, 线程只要分配栈,一个PC就好,内存开销小
总结
进程是一个运动(进展)中的程序。进程间可以通信、同步、竞争,可能形成死锁。进程在一个时间只能干一件事情。
线程可以同时干两件事,(多线程被限制在一颗CPU内)线程是进程里的一个执行上下文或者执行序列。