有關(guān)并行(Parallelism),不得不提的肯定是Erlang,通用的面向并發(fā)的函數(shù)編程語言,這種編程語言的選擇蒂培,也是可以規(guī)避我們在程序設(shè)計上面減少很多精力放在鎖上面,這樣的設(shè)計方式榜苫,導致Erlang的性能特別好护戳。
Erlang主要的設(shè)計框架的精華是 Actor模型。
Actor模型
先科普一下Reactor pattern垂睬,高手勿噴媳荒。
我們在用的比較多的抗悍,C, C++, Java這些語言的時候,本質(zhì)還是一個面向過程的設(shè)計钳枕,隨著對性能的要求缴渊,和優(yōu)化的思想,出現(xiàn)了multithreading multiprocessing鱼炒,這些都是為了并發(fā)(concurrency)提升性能衔沼。但是終究迫于整個架構(gòu)影響,性能現(xiàn)在集大成的思想是node.js使用的Reactor pattern
回到Actor模型
The actor model in computer science is a mathematical model of concurrent computation that treats "actors" as the universal primitives of concurrent computation: in response to a message that it receives, an actor can make local decisions, create more actors, send more messages, and determine how to respond to the next message received.
The Actor model adopts the philosophy thateverything is an actor. This is similar to the everything is an object philosophy used by some object-oriented programming languages.
簡單的交互方式如下昔瞧,
在我們對傳統(tǒng)模型不斷壓榨之后指蚁,發(fā)現(xiàn)性能上去了一些,但是終究設(shè)計起來還是很吃力自晰,并且很難控制程序的穩(wěn)定性凝化,需要各種HA的幫助,保證(Web大型服務(wù))的可靠性酬荞,不down機搓劫。后來大家發(fā)現(xiàn)誕生于上世紀80年代的Erlang了,這種一切皆Actor袜蚕,面向并發(fā)的特性就是夢寐以求的。
Actor 模型中核心的是supervisor
A supervisor is responsible for starting, stopping and monitoring its child processes. The basic idea of a supervisor is that it should keep its child processes alive by restarting them when necessary.
有下面兩種方式保障高可靠性绢涡,All-For-One and One-For-One.
可以看到整個體系已經(jīng)不是傳統(tǒng)的基于流程的設(shè)計牲剃,完全的是一套去中心化的,需要supervisor負責下面actor(process)的狀態(tài)即可雄可,一個actor掛了凿傅,在創(chuàng)建一個即可。actor之間通過message的方式通信数苫。
這些被現(xiàn)在的后起之秀akka吸收進來聪舒,
Akka is an open-source toolkit and runtime simplifying the construction of concurrent and distributed applications on the JVM. Akka supports multiple programming models for concurrency, but it emphasizes actor-based concurrency, with inspiration drawn from Erlang.
這種優(yōu)美的方案,第一次看到還是在讀Kevin Kelly虐急,《失控》
“若干年內(nèi)利用幾百萬只低成本小機器人入侵一顆地外行星是可能的箱残。”他提議用一次性火箭發(fā)射一群鞋盒大小的太陽能推土機去入侵月球止吁。派出一支由無足輕重被辑、能力有限的機器人個體組成的軍隊,讓它們協(xié)同完成任務(wù)敬惦,并允許它們自由行動盼理。有些士兵會死掉,大多數(shù)會繼續(xù)工作俄删,并最終做出一些成績宏怔。
絕大多數(shù)的移動機器人會在著陸后的數(shù)月內(nèi)死去奏路。日復一日的嚴寒酷熱會使電腦芯片開裂失效。但就像螞蟻群落臊诊,單個的移動機器人是無足輕重的鸽粉。和“漫步者”相比,他們被發(fā)射到太空的費用要便宜上千倍妨猩;這樣一來潜叛,即便發(fā)射數(shù)百個小機器人,其成本也只是一個大機器人的零頭壶硅。
其實就是這個模型威兜,這種模型,可以有效自適應(yīng)庐椒,對于我們現(xiàn)在常見的大型系統(tǒng)特別高效椒舵。
我們在軟件設(shè)計上面的模型,其實可以看到在社會约谈,生活中也是可以映射的笔宿。
- 政治 民主和集權(quán)
- 經(jīng)濟 哈耶克和凱恩斯
- 管理 自上而下還是扁平放權(quán)
- 互聯(lián)網(wǎng) 開發(fā)平臺還是封閉平臺
個人意見,如有不對棱诱,請指正~~