java多线程之并行和并发

1.并发和并行是即相似又有区别(微观概念)

并行:指两个或多个事件在同一时刻点发生;
并发:指两个或多个事件在同一时间段内发生。
------------------------------------------------------------------------------------------------
在操作系统中,在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行,但在单CPU系统中,每一时刻却仅能有一道程序执行(时间片),故微观上这些程序只能是分时地交替执行

倘若计算机系统中有多个CPU,则这些可以并发执行的程序便可被分配到多个处理器上,实现多任务并行执行,即利用每个处理器来处理一个可并发执行的程序,这样,多个程序便可以同时执行,因为是微观的,所以大家在使用电脑的时候感觉就是多个程序是同时执行的。所以,大家买电脑的时候喜欢买“核”多的,其原因就是“多核处理器”电脑可以同时并行地处理多个程序,从而提高了电脑的运行效率。单核处理器的计算机肯定是不能并行的处理多个任务的,只能是多个任务在单个CPU上并发运行


同理,线程也是一样的,从宏观角度上理解线程是并行运行的,但是从微观角度上分析却是串行运行的,即一个线程一个线程的去运行,当系统只有一个CPU时,线程会以某种顺序执行多个线程,我们把这种情况称之为线程调度
-------------------------

时间片即CPU分配给各个程序的运行时间(很小的概念).


什么是进程?

① 进程是系统进行资源分配的最小单位,也是系统进行资源调度的基本执行单元。
② 它是程序的一次执行过程。简单点的说“进程是正在运行的程序的实例”。
③ 每个进程运行在受保护的独立的内存空间内,进程和进程之间互不干扰。

什么是线程?

① 线程是CPU调度的最小单位,是进程中的一个实体。
② 每一个应用程序在启动之后,都会默认开启一条主线程,除了主线程,其他的线程都是子线程。
③ 一个线程可以创建和撤销另一个线程。(线程的生命周期放在下一篇博文里面。)

进程、线程区别是什么?

① 进程和线程都是程序运行的基本单元,一个程序至少有一个进程,一个进程至少有一个线程。
② 线程的划分尺度小于进程,使得多线程程序的并发性高。
③ 同一个进程中的多个线程之间可以并发执行,线程共享内存,从而极大地提高了程序的运行效率。

关于并发、并行的区别

并发
简单的来说就是指一个时间段内,多个任务同时处于运行活跃状态,而不是在同一时刻运行多个任务。那问题来了,为什么我们感觉像是多个任务同时执行的呢?这是因为每个线程都被分了一个时间段,叫做时间片。因为CPU处理速度很快,所以看上去就是多个任务在同时执行,实际上就只有一个任务在执行。

并行
并行相对来说能简单些,指若干个程序段同时在系统中运行,这些程序的执行在时间上是重叠的,一个程序段的执行尚未结束,另一个程序段的执行已经开始,无论从微观还是宏观,程序都是一起执行的。

举个例子
在幼儿园呢有很多小宝宝对吧,现在有个小宝宝(程序或者线程)不开心,哭了。其他小宝宝受到这个小宝宝情绪感染,陆续开始哭,这时你(CPU)要快速把一个小玩具递给一个正在哭的小宝宝,他有了小玩具就不哭了。理论上只要你够快(CPU执行速度),谁哭就把这个小玩具送给谁,就没有小宝宝哭了,这就是并发。并行就是多了几个幼师,每个幼师都送给各自宝宝一个玩具,每个宝宝现在都有玩具了,这就是并行。


猜你喜欢

转载自blog.csdn.net/qijingwang/article/details/80363414