进程、线程的联系与区别

最近学了一些线程和进程之间关系和区别,接下来我就总结一下最近所学:

(一)讲解一下并发和并行的区别:

并行:指两个或多个事件在同一时刻点发生;

并发:指两个或多个事件在同一时间段发生。

(1)在操作系统中,多道程序环境下,并发性是指在一段时间内宏观上由多个程序在同时运行,但在单cpu系统中,每一时刻都却仅有一道程序执行(时间片轮转法),故微观上这些程序只能是分时的交替运行。倘若计算机系统中有多个cpu,则这些可以并发执行的程序便可被分配到多个处理器上,实现多任务并行执行,即利用每个处理器来处理一个可并发执行的程序,这样,多个程序便可以同时执行,因为是微观,大家使用电脑会觉得就是多道程序在同时(并行)执行!

(2)在单核处理器的计算机肯定是不能并行的处理多个任务(抢占式cpu而运行),只能是多个任务在单个cpu并发运行。同理线程也是一样,从宏观上理解线程是并行执行的,但是从微观角度上分析单核cpu上线程是串行运行,只能一个线程一个线程的去运行,当系统只有一个cpu时,线程会以某种顺序去执行,这种方式叫做线程调度

(3)线程调度:计算机通常只有一个cpu时,在任意时刻只能执行一条计算机指令,每一个进程只能获得cpu的使用权才能执行指令,所谓多进程并发运行,从宏观上看,其实各个进程轮流获得cpu的使用权(时间片轮转法,或分时执行),分别执行各自的任务;在可运行池中,会有多个线程处于就绪状态等到cpuJVM就负责线程的调度!

(二)线程和进程之间的区别:

(1)进程:进程是一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个应用程序可以同时启动多个进程(一个应用程序可包含多个进程),进程也是调度和分配资源的独立单元。(JVM就是一个进程)有独立的内存空间,进程中的数据存放空间(堆空间和栈空间)都是独立的,进程中至少要包含一个线程,否则失去意义!

(2)线程:线程是指进程中的一个执行任务(控制单元),一个进程可以同时并发运行多个线程,如:多线程下载软件。一个进程至少有一个线程,为了提高效率,可以在一个进程中开启多个执行任务,即多线程!线程中堆空间是共享的(创建对象),多线程之间可以共享堆空间资源,但是每个线程都有一个独立的栈空间;并且线程消耗的资源也比进程小,线程之间的切换运行效率高,因而又称为轻量型进程或进程元;

   解释:一个进程中的多个线程是并发执行的(单核),那么微观上讲,这多个线程在执行上是有先后顺序的,那么哪个线程执行完另一个线程紧接着获取cpu执行呢?这取决于cpu的调度,程序员是控制不了的。这样就可以视为多线程并发性看作是多个线程在瞬间抢占cpu资源,谁先抢到谁就执行!

(三)多线程的优势:

了解概念:

多进程:操作系统中同时并发运行的多个程序(单核);

多线程:在同一个程序(进程)中同时并发运行的多个任务。

注意:在写java程序时,通常我们管只有一个main 函数叫单线程程序,这只是JVM这个程序中的一个线程,JVM本身就是一个多线程的程序,里面至少得有一个垃圾回收线程!

多线程的优势:

(1)进程之间不能共享内存(堆内存),而线程之间可以共享内存(堆内存),即共享资源;

(2)系统创建进程时需要为该进程重新分配系统资源,创建线程则代价很小,因而实现多任务并发时,多线程效率比较高;

(3)Java语言本身内置就支持多线程的功能。


举例说明:

(1)车的单行道和车的多行道

在车的单行道中,一段时间内通过的车辆数一定没有在多行道中相同时间内通往车辆数量多;就比如:在单线程中执行的任务量肯定没有多线程执行相同任务量所有的时间短。

(2)文件单线程和多线程下载

多线程下载,可以理解为一个线程就是一个文件的下载通道,多线程也就是同时开启几个下载通道,当服务器提供下载服务时,使用下载者会共享带宽的,在优先级相同的情况下,总服务器会对下载线程所使用的带宽进行平均分配。线程越多,所获带宽越大,下载速度越快!(资源利用率高);

多线程是为了同步完成多项任务,不是为了提供程序运行的效率,而是通过提高资源的利用率来提高系统的运行效率!




下载线程开启越多,资源利用率越高,使用抢占式cpu的方式,带宽占有率越高,下载速度越快!

重点:在多线程运行的进程中,主要是通过提高资源的利用率(cpu、内存),来达到资源最大化的共享,前提是多线程之间访问资源要安全(线程同步)!



猜你喜欢

转载自blog.csdn.net/super_yc/article/details/73195513