Java 多线程系列文章第 3 篇
这篇文章继续来唠唠概念, 讲这三兄弟: 串行 (Serial), 并行 (Parallel), 并发 (Concurrent).
吃快餐
出门在外吃饭是一件头疼的事, 用我大学舍友一句话形容: 如果不是没吃饭不能活, 他是不会吃饭的. 不管学生还是工作者, 吃饭都是一件需要揪心的事, 有食堂的企业员工纠结要在公司食堂吃饭还是在外面吃饭, 没食堂的企业员工则纠结是吃面还是吃米饭. 每到饭点, 和同事去吃饭都会问一句废话: 吃啥? 然后相视而笑, 继续吃快餐...
咱吃快餐也能学点知识, 我来给大家一一道来. 快餐有一个很明显的特点就是: 排队!!! 目前我见过的有下面几种排队方式, 刚好和咱们今天要讲的串行, 并发, 并行一一对应.
现在我们公司附近的快餐, 人少的时候, 就是排一条队, 如下图所示, 每个人按顺序排, 一直往前走, 如果看到想吃的菜, 就用手指一指, 快餐员工就会给你打菜, 这个应该是很多快餐店都采用的方式, 容易管理, 但是有一点需要强调的就是如果一个同学只想吃米饭和豆芽, 他还是需要排一整队到最后的结账台结账. 这其实就是咱们计算机世界里面的串行, 一条队伍, 依次有序的执行着.
不过一到 12 点高峰期上面那种排队方式就撑不住了, 分分钟排队排到外面晒太阳, 这时为了提高效率, 因为快餐店还有一片空地, 所以又加了一套打菜装备和员工, 这时很好的解决了一条队伍太长的问题, 这时就是并行了, 2 套打菜装备和员工各自互不干涉, 完全独立, 每套装备能够解决每个顾客的点菜需求. 当然这要求比较高, 需要餐厅有足够的空间可以放下两套装备, 并且需要雇佣多一倍的员工来为顾客打菜, 这里就类似计算机的双核.
除了上面的两种快餐排队方式, 还见过下面这种的, 只有一套打菜装备, 但是却有很多个队, 每个菜排一条队 (现实中其实不止一个菜, 而是多个菜, 这里画图就简化成一个菜), 每个人就只需要排自己想吃的菜的队伍, 这一道道菜就像计算机的各个资源, 比如 CPU,IO 等等, 人就像一个一个进程, 有些只需要 CPU 计算资源, 有些还要 IO 资源, 各取所需, 这种方式就是并发. 这种打菜方式和上面第一种所需要的资源是一样的: 一套打菜装备和员工. 每个顾客最终都需要走到结账这个步骤, 而结账只有一个, 也就是类似计算机的单核.
总结
那么回归到计算机世界, 这三者是什么东西呢? 早期计算机只有一个 CPU, 也就是所谓的单核计算机, 只有一个 CPU 去执行任务, 所以只能是一个任务一个任务的跑, 每个任务跑完才让下一个任务跑, 也就是串行的, 后面因为进程和线程概念的提出与实现, 它们使得任务以进程的方式运行, 拆分成多个时间片运行, 而不是一次运行执行完任务, 这样子在一个 CPU 运行中可以有多个任务在并发执行, 这时还是只有一个 CPU, 一个时间点只有一个任务在执行, 而并行是因为 CPU 硬件的发展, 出现多核 CPU, 所以实现了真正的同一时间点能有多个任务在执行.
上面用快餐排队现象给大家解释了串行, 并行, 并发这三个概念, 大家理解了么? 如果不理解可能是我讲得不够透彻, 可以留言跟我提一提建议; 如果理解了, 可否帮忙转发一下, 多谢啦!
来源: https://www.cnblogs.com/liebrother/p/11161609.html