- 进程vs线程
进程(process)指的是正在运行的程序的实例,即an instance of a computer that is being executed。用拆字法理解就是:进行中的程序。程序是一个没有生命的实体,只有处理器执行它的时候才能成为一个活动的实体,称之为进程。例如:正在运行的程序,QQ 360 …
线程(thread)包含于进程之中,是操作系统能够进行运算调度的最小单元。一条进程中可以并发多个线程,而同一条线程将共享该进程中的全部系统资源。就是进程中一条执行程序的执行路径,一个程序至少有一条执行路径。(360中的杀毒 电脑体检 电脑清理 同时运行的话就需要开启多条路径)
开始前先看一组非常传神的图例,相信可以帮助你更好理解进程与线程的概念:
每个进程都有自己独立的地址空间、内存和数据栈,因此进程之间通讯不方便,要是用进程间通讯(InterProcess Communication, IPC),进程的创建、销毁与切换存在着较大的时空开销,因此人们急需一种轻型的进程技术来减少开销。在80年代,线程的概念开始出现,线程被设计成进程的一个执行路径,同一个进程中的线程共享进程的资源,因此系统对线程的调度所需的成本远远小于进程。因此线程间通讯非常方便,但要注意数据同步与互斥的问题。
虽然一条进程中可以并发多个线程,但是对于单核CPU而言,同一时间CPU只能运行一个线程。
每个线程都有自己需要运行的内容,而这些内容可以称为线程要执行的任务。
开启多线程是为了同时运行多部分代码。
好处:解决了多部分需要同时运行的问题
弊端:如果线程过多,会导致效率很低(因为程序的执行都是CPU做着随机 快速切换来完成的)
多线程简单理解就是:一个CPU,也就是单核,将时间切成一片一片的,CPU轮转着去处理一件一件的事情,到了规定的时间片就处理下一件事情。
2.线程与进程的区别
本质区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。
包含关系:一个进程至少有一个线程,线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。
资源开销:每个进程都有独立的地址空间,进程之间的切换会有较大的开销;线程可以看做轻量级的进程,同一个进程内的线程共享进程的地址空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销小。
影响关系:一个进程崩溃后,在保护模式下其他进程不会被影响,但是一个线程崩溃可能导致整个进程被操作系统杀掉,所以多进程要比多线程健壮。
进程与线程的一个简陋模型用图表示的话,是这样的:
理论过于抽象难解,下面还是用大家喜闻乐见的现实中的例子去类比,没错还是工厂的例子:
在计算机这个大工厂中,进程被比作一个车间,为生产活动提供了设计图、场地、生产线(线程)等生产要素,而线程是这个车间中的一条条生产线。生产线本身会有一个操作台,具体的零件在这里被生产。生产线必须由工人操作才能动起来,当工人来到一个生产线旁并启动它之前,必须查阅生产线的生产记录以便弄清楚这个生产线的零件加工到哪种程度了,然后才能准确地接续生产,当工人停止生产线前也必须记录这次的生产进度以备下次读取,这些进度信息可以理解为上下文,读取和记录生产进度的过程称为上下文切换。
一个工人可以在多条生产线间穿梭操作,就像CPU在不同线程间切换一样,这个动作被称为并发,与之对应的,多个工人操作多条生产线同时生产,称为并行。如果生产线不需要太多原料输入就能生产,那这种生产任务被称作CPU密集型,反之如果生产线大部分时间在等待原料的输入,那这种任务被称为IO密集型。显然,前者最好一条生产线由一个工人专管效率更高,而后一种任务,一个人在原料输入的间隙去操作其他生产线,无疑能提高工人利用率。