26

图解并发与并行-分别从CPU和线程的角度理解

 3 years ago
source link: https://segmentfault.com/a/1190000024438608
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本文作为图解java并发编程的第三篇,前2篇访问地址如下所示:

一、CPU角度的并发与并行

bMvANrB.png!mobile

并发

曾经我作为一个不是很爱学习的孩子,在上学的时候经常做这样的事情:在数学课上补物理作业,数学课听懂了,物理作业也上交了。不谦虚的说,我是具备这样的能力,但很可惜没用对地方。

很多同学说:“你是不是有多个大脑?”,肯定不是啊,其实这是一种切换的能力。当你同时做多件事情,并且能够快速切换的时候。在别人开来,你就有了并发的能力,但是你的大脑还是一个大脑。

我们的计算机在绝大部分时间都运行很多很多的进程与线程,所以CPU并发执行并切换 分配CPU时间片资源 是一种常态。只是CPU的执行速度实在是太快了,快到绝大部分情况下你都无法感知“执行线程的切换”。所以看上去它在一边播放音乐,一边运行浏览器,一边运行其他软件。

并行

知道了计算机中并发的概念,我们来举例了解一下并行的概念。

  • 你在餐厅点餐,点餐后等餐的同时你在读书。看上去你是在做两件事,等餐和读书。实际上只有一件事是需要你实际操作的,那就是读书;另外一件事实际上是做菜,做菜是由餐厅的厨师进行的。

随着计算机多核CPU的普及,计算机也在一定程度上具备了并行计算的能力。那这么说,单核心的CPU就一定不存在并行能力喽?也并非完全如此,若单核心的CPU拥有 Hyper-threading 技术,那么单核心可以并行的运行两个逻辑线程。

二、线程角度的并发与并行

上面的并发与并行的解释更多的是从CPU运行的角度,但作为程序员更关心的是作为开发者如何区分并发与并行。

从线程的角度去谈并行,通常是指在多线程间不存在数据共享或通信,能够利用CPU的并行能力去运行多线程。

ieQJzie.png!mobile

从线程的角度去谈并发,通常是指多个线程之间存在资源共享(内存、代码段等),彼此协调共享资源的使用,从而交出或获得CPU执行时间片的使用权。

juu6Vze.png!mobile

总结一句话,希望对你与理解并发与并行有帮助, 并发是看上去的并行,实际上的资源切换,并发目的是将资源利用能力最大化、最优化。

期待您关注我的博客,里面有很多我的技术知识精品合集

本文转载注明原始出处: 字母哥博客 - zimug.com


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK