线程的基础知识之并行与并发的区别:
引言:在计算机科学中,并行和并发是两个经常被提及但容易混淆的概念。本文将通过解释它们在单核和多核CPU下的工作方式,帮助读者更好地理解这两者之间的区别。
学习内容:
例如:
- 线程与进程的区别
- 并行与并发的区别
- 线程创建的方式有哪些
- runnable 和 callable 有什么区别
- 线程包括哪些状态,状态之间是如何变化的
- 在java中wait和sleep方法的不同
- 新建三个线程,如何保证它们按顺序执行
- notify( ) 和 notifyAll( ) 有什么区别
- 线程的 run( ) 和 start( ) 有什么区别
- 如何停止一个正在运行的线程
- 并行与并发的区别
并行与并发的区别:
提示:并行和并发分为两种情况单核CUP和多核CUP
一、单核CPU下的并发
-
在单核CPU下,尽管操作系统可以创建多个线程,但实际上这些线程并不是同时执行的。
-
由于只有一个核心来处理任务,因此线程之间需要共享CPU时间片。
-
看下图 ,下面有三个线程,没给线程多分配了不同的时间片,它不能去同时执行下面三个线程
-
执行下个如下,先执行线程1
-
在执行线程2
-
然后执行线程3
-
上述是简单描述,不见得是先线程1、线程2、然后线程3,但只能它没一个时间片只能有一个线程被执行
-
操作系统中有一个组件叫做任务调度器,将 cpu 的时间片 ( windows下时间片最小约为 15 毫秒 ) 分给不同的程序使用,只是由于 cpu 在线程间 ( 时间片很短 ) 的切换非常快,人类感觉是同时运行的
-
总结为一句话就是:微观串行,宏观并行
-
一般会将这种线程轮流使用 CPU 的做法称为并发 ( concurrent )
这个就是单核 CUP 下并行和并发的情况
二、多核CPU下的并行
- 与单核CPU不同,多核CPU拥有多个核心,每个核心都可以独立地执行线程。这意味着在多核CPU下,线程可以实现真正的并行处理。当系统中有多个线程需要执行时,每个核心可以分别调度和执行一个线程,从而实现多个线程在同一时间内同时执行的效果。
- 例如,考虑一个具有两个核心和四个线程的系统。
-
在时间片1中,核心1可以执行线程1,而核心2可以执行线程2。这样,线程1和线程2在同一时间内并行运行。
-
同样地,在下一个时间片中,核心1和核心2可以分别执行线程3和线程4(或任何其他组合)。通过这种方式,多核CPU能够显著提高处理大量并行任务的能力。
-
需要注意的是,并行(Parallel)是指系统能够同时执行多个任务的能力,这通常需要在多核CPU或分布式系统中才能实现。而并发则更注重于系统能够同时处理多个任务的能力,尽管这些任务在单核CPU上实际上是交替执行的。但在多核CPU下,并发和并行可以同时实现,因为每个核心都可以独立地执行线程。
总结:
- 并发(concurrent) 是同一时间应对(dealing with)多件事情的能力
- 并行(parallel) 是同一时间动手做 (doing)多件事情的能力
本文通过解释并行和并发在单核和多核CPU下的工作方式,帮助读者更好地理解这两者之间的区别。在单核CPU下,尽管可以创建多个线程,但实际上它们是交替执行的(微观串行),从而实现一种并发的效果。而在多核CPU下,每个核心都可以独立地执行线程,从而实现真正的并行处理。了解这些概念对于理解和优化多线程应用程序的性能至关重要。