本文作为图解 java 并发编程的第三篇,前 2 篇拜访地址如下所示:
- 图解过程线程、互斥锁与信号量 - 看完还不懂你来打我
- 8 成以上的 java 线程状态图都画错了 – 图解 java 并发第二篇
一、CPU 角度的并发与并行
并发
已经我作为一个不是很爱学习的孩子,在上学的时候常常做这样的事件:在数学课上补物理作业,数学课听懂了,物理作业也上交了。不谦虚的说,我是具备这样的能力,但很惋惜没用对中央。
很多同学说:“你是不是有多个大脑?”,必定不是啊,其实这是一种切换的能力。当你同时做多件事件,并且可能疾速切换的时候。在他人开来,你就有了并发的能力,然而你的大脑还是一个大脑。
咱们的计算机在绝大部分工夫都运行很多很多的过程与线程,所以 CPU 并发执行并切换 调配 CPU 工夫片资源 是一种常态。只是 CPU 的执行速度切实是太快了,快到绝大部分状况下你都无奈感知“执行线程的切换”。所以看上去它在一边播放音乐,一边运行浏览器,一边运行其他软件。
并行
晓得了计算机中并发的概念,咱们来举例理解一下并行的概念。
- 你在餐厅点餐,点餐后等餐的同时你在读书。看上去你是在做两件事,等餐和读书。实际上只有一件事是须要你实际操作的,那就是读书;另外一件事实际上是做菜,做菜是由餐厅的厨师进行的。
随着计算机多核 CPU 的遍及,计算机也在肯定水平上具备了并行计算的能力。那这么说,单核心的 CPU 就肯定不存在并行能力喽?也并非齐全如此,若单核心的 CPU 领有 Hyper-threading 技术,那么单核心能够并行的运行两个逻辑线程。
二、线程角度的并发与并行
下面的并发与并行的解释更多的是从 CPU 运行的角度,但作为程序员更关怀的是作为开发者如何辨别并发与并行。
从线程的角度去谈并行,通常是指在多线程间不存在数据共享或通信,可能利用 CPU 的并行能力去运行多线程。
从线程的角度去谈并发,通常是指多个线程之间存在资源共享(内存、代码段等),彼此协调共享资源的应用,从而交出或取得 CPU 执行工夫片的使用权。
总结一句话,心愿对你与了解并发与并行有帮忙,并发是看上去的并行,实际上的资源切换,并发目标是将资源利用能力最大化、最优化。
期待您关注我的博客,外面有很多我的技术常识精品合集
本文转载注明原始出处:字母哥博客 – zimug.com