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