首先我们先来形象的比喻一下:
CPU->相当于一座工程,时时刻刻都在运行.
进程->相当于工厂的车间,他代表CPU所能处理的单个任务.任意时刻,CPU总是运行一个进程,其他进程处于非运行状态.
一个车间会有很多个工人,他们协同完成一个任务,线程就相当于车间里的工人,一个进程可以包含多个进程.
一个进程中可以有多个线程,他们共享这个进程的资源.线程又被称为迷你进程,但是他比进程更容易创建,也更容易撤销.
线程时进程中执行运算的最小单位,是操作系统执行处理机制的基本单位.每个进程至少有一个线程,线程可以利用进程所拥有的的资源调度和运算.
但是我们为什么经常听到多线程而没有听到多进程呢?
那么我们就聊一聊进程的有点:
线程的特征和进程差不多,进程有的他都基本有,比如:
- 线程具有就绪,阻塞,运行三种基本状态,同样具有状态之间的转换关系.
- 线程间可以并发执行,
- 在多CPU的环境下,多线程也可以分配到不同的CPU上并行执行->充分利用CPU
优点:同一个进程中可以同时存在多个线程,这些线程共享该进程的资源,进程建的通信必须请求操作系统服务(因为CPU要切换到内核态),开销很大,同一进程下的线程间,无需操作系统敢于,开销更小.
但是,不同进程之间线程的通信,也必须请求操作系统服务
线程间的并发比进程间的并发开销更小,系统并法性提升
同样,需要注意的是,从不同进程的线程进行操作,他是会导致进程切换的,,所以开销也很大.
应为这些特点导致:不管是创建线程,销毁线程,调度线程都比进程更快
但是进程也是优缺点的:
当进程中一个线程崩溃时,会导致其所属进程中所有线程崩溃.
既然介绍完进程和线程这么相似,那么不妨聊聊将线程和进程放在一起讨论
引入线程之前,进程是资源分配和独立调度的基本单位.引入线程之后,进程是资源分配的基本单位,线程是独立调度的基本单位
进程与线程的对比
- 进程是操作系统分配资源的基本单位,所有与该进程有关的资源,均会被记录在进程控制块PCB中,已表示该进程所拥有的全部资源.同进程下的所有线程共享该进程下所有资源
- 线程是分配处理机的基本单位,与资源分配无关.事实上.正在处理机上的运行的是线程,而不是进程
- 一个进程只能属于一个进程,而一个进程可以属于多个线程,但至少有一个线程.
- 线程在执行的时候需要协作同步,不同进程建要利用消息通信的方法实现同步.
线程与进程之间的关系
- 进程将CPU资源分配给线程,即真正在CPU上运行的是线程
- 操作系统分配给进程,同一进程所有线程共享该进程的所有资源
进程与线程的区别
- 同一进程的中的线程共享同一内存空间,但是进程之间是独立的.
- 同一进程中的所有线程的数据是共享的(进程通讯),进程之间的数据是独立的.
- 对于同一进程内的线程可能会影响其他线程,但是一个进程的不会影响其他进程
- 线程是一个上下文的执行指令,而进程则是与运算相关的一簇资源。
- 同一个进程的线程之间可以直接通信,但是进程之间的交流需要借助中间代理来实现。
- 创建新的线程很容易,但是创建新的进程需要对父进程做一次复制。
- 一个线程可以操作同一进程的其他线程,但是进程只能操作其子进程。
- 线程启动速度快,进程启动速度慢(但是两者运行速度没有可比性)。
多进程
在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态,这便是多任务(多进程)。现代的操作系统几乎都是多进程操作系统,能够同时管理多个进程的运行。 多进程带来的好处是明显的。但是多进程对于系统的资源要求甚高,资源浪费也比较严重。应用多进程场景最多的是windows系统,例如同时打开运行软件,每个软件打开相当于运行一个进程。
多线程
在一段完整的代码中,往往会有需要独立的代码模块,而这些独立运行的程序片段叫作“线程”(Thread),利用多个线程编程的概念就叫作多线程处理(多线程编程),多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。多线程是在程序在同一时间需要完成多项任务的时候实现的。多线程的目的仅仅是为了提高资源利用效率。各个线程执行自己的任务,这些线程可以”同时进行“。同时进行并非同一时刻进行,而是在某一时间段内,完成所有任务,任务的运行有先后顺序。