《并发哲学:从编程入道到开悟升天》2.1如何定义以及理解并发
如何定义以及理解并发
本小节我们将介绍并发权威定义,并重点讨论理解选型。
并发权威定义
严格意义上的并发,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行(百度百科)。
并发是计算机术语,这意味着传统意义上狭义的讨论并发,离不开计算机科学的范畴。
广义上,并发指逻辑控制流在时间上重叠。
本质上说,并发是对在解决串行作业系统与并行化作业需求这一矛盾过程中客观实现的各类解决方案的运行时体现。
并发模型与理解模型
从各类并发权威定义中,我们隐晦的看到了并发的很多要素,包括“一个又同时”,“逻辑与实际”,“串行与并行”,“矛盾中推进”等诸多表述。除了并发是计算机术语此类严格且没有争议的理解与定义,其他的概念有必要通过具体的理解模型来进行进一步阐述,这样可以消除理解歧义,从而更好的学习相关的并发知识。
这里首先要将并发模型与理解并发的模型区别开来。
并发模型,指对一系列并发技术解决方案的具体抽象,是一种具体方案,具体方法论,落实到实际的解决问题过程中,依托这些模型构造出最终的运行系统。并发模型本身讨论的是并发实现。例如流水线模型、select模型、epoll模型等,这些模型具象化表现在许多实际的软件/系统中,例如前文提到的nginx、intel的某款处理器。
而理解并发的模型,则本身并不是在讨论并发技术。对理解并发模型的相关改动,不会影响到实质性系统的优劣与实施,只会影响到人们理解对应概念的顺畅程度,会影响到知识的学习与迁移。对于同一个知识点,理解的方式可以千差万别。我想这样的阐述对于你来说是清晰的。
并发模型与理解并发模型二者之间有显著不同,但也产生广泛联系。例如Intel的流水线模型,不但是一个优秀实践的方法论,同时将流水线生动的故事化,营造出工人切实在流水线上工作的场景,此时流水线模型成为了理解并发的一种模型。又例如epoll模型等,借助理解模型(酒保模式等),我们可以更好的分析该模型设计的原因,并更好的将模型与其他模型做横向对比。
不同的并发模型可以引发人们更多的理解模型,反过来某些并发模型本身便可以成为某种理解模型,二者相互依存相互促进,此处不再赘述,本章我们主要讨论理解选型。
网络上流行的理解并发的模型
此处将摘编若干用于理解并发的模型,我们将试图横向比对他们的优劣,请着重体会在比较过程中,对于并发内在逻辑的探寻,和对并发系统设计中的考量。
两运动员争抢跑道模型
来源:某技术博客推荐
基本论述:运动员代表运行的程序,或者是进程/线程,跑道代表着进程/线程运行必需的资源,没有跑道资源,运动员无法跑步。如果只有一个运动员,那么跑步可以畅通无阻,如果有两条跑道,那么A、B可以同时在这两条跑道上分别跑步向前,互不干扰。若两个运动员A、B参与,跑道只有一条,那么只能A、B交替进入跑道跑步向前,但只要切换的够快,在别人看来,这两个运动员实现了在同一条跑道上跑步的现象。
【此处配图】
体现观点:需要考虑并发设计,只因为是资源缺乏与多任务运行的矛盾。如果消减任务运行数量的需求,或者增加资源,并发设计是没有必要的。
评价:该模型较为直观的试图让人理解并发,但从根本上探究并发的必要性的结论错误,本末倒置。希望各位尽量不要用这个模型理解并发概念。试问,争抢和切换如此的“耗费精力”,我们为什么还要去思考“并发设计”呢?在该模型的引导下,我们发现减少运动员的数量,或者增加跑道的数量,成为了最优解。
咖啡机/啤酒机模型
来源:Erlang之父Joe Armstrong等人
基本论述:队伍井然有序,大家不会插队,大家希望通过排队有序获取到咖啡。两个队伍同时排一个咖啡机,取咖啡的效率综合来看会更高。如果是每一个队伍都有一个咖啡机,若顺畅,则效率最高。但如果有人因为急事比如上厕所,那么该队伍将停滞,取咖啡的活动将阻塞。
【此处配图】
体现观点:对某种资源的利用,并发可以对执行状态监听,调度走暂时无法利用资源的执行任务,让出给其他需要利用该资源的执行任务,从而综合提升利用效率。
评价:该模型经久不衰,作为宣称5岁小孩也能看懂的理解模型,有相当的积极意义,Erlang之父的背书也让其出现在种种普及材料中。但该模型依然只是以资源为主要视角,以咖啡机能否有效得到利用作为评价指标,对于并发控制、调度方法等,无法进一步展开做很好的说明,模型的可扩展性不强。
时间管理模型(吃饭模型)
来源:某知识分享社区
基本论述:人不可能同时存在在两个地方,但如果你需要确实在同一个时间让另外一个地方也能按你的想法执行任务,则需要事先准备。例如你在接你女朋友,同时希望你购买的鲜花能准时送达,最好的方法是在出发接女朋友前,拨打预订电话进行配送。人很难一边吃饭一边洗衣服,但如果确实需要这样做,最好的解决方案是吃饭之前打开洗衣机,利用洗衣机完成洗衣服,同时不会影响到吃饭。
【此处配图】
体现观点:并发的产生是因为任务要求与客观可同时实现任务能力的冲突,导致必须需要通过借助其他实体,进行合理调度,最终综合上达成目标。
评价:该模型与本书所阐述的理论基本完全贴合,是本人最欣赏的一个模型。美中不足的就是案例过于宽泛,在具体的阐述过程中,一般人可能很难体会到内在蕴含的并发思想与哲学,需要稍微优化。
综合上面,我们可以看到,网络上对于同样一个并发概念的理解可谓千差万别,人们往往会一概认为上述的理解模型均为正确,类似的“不可能-可能”,“分开执行-同时”等模糊的论述,让人们误以为这些模型阐述的是代表着同一个观点。但实际上,不够完美甚至是错误的理解模型,将进一步加重人们的疑惑!这也是为什么经常人们越看用于理解的案例,却越发现理解不了的原因。简明、有力、准确、可扩展的理解模型,呼之欲出。
理解并发模型的选型标准
一千个人心中有一千个哈姆雷特,我们显然不能一概而论的说不符合某种标准的“理解”是完全错误的,但可以总结出一些理解选型的标准:
- 来源于生活,不受制于地域/国别限制,最好是普适的人类活动体现(例如吃饭、跑步、排队)
- 体现正确且准确的并发哲学(并发思想的起源,采取并发方案的目的,参见前文所述)
- 具有良好的可扩展性,可以进一步扩充故事,增强内涵
理解选型在我们看来是重要的,作为连接并发哲学模型与具体并发实践的桥梁,如果在理解模型这一块出现方向性失误,那么之后的学习不但吃力而且南辕北辙。如果在理解模型这一块的阐述过于陌生,或者是晦涩难懂,又难免产生脱节,加重读者阅读负担。
经过综合评估,我们通过并发思想起源,结合人类发展过程中的突出特征,总结出两大一简一繁的经典模型供之后使用,我们将在下一小节展开进行介绍,希望各位读者们可以喜欢。