erlang雖然目前還不是主流語言,但有可能在未來一段時間發揮重要的作用.即使你不用erlang,也可以從erlang的設計和erlang的社群的智慧型中得到啟發,就算是從開啟思路,全面認識計算本質和平行計算特性的角度出發,erlang也值得了解.
死鎖,競態,越來越多的鎖帶來了越來越複雜的問題.
比如x=x+n,(共享記憶體陷阱)
從機器指令的角度思考
1)mov ax, [bp+x];//將暫存器ax賦值為變數x所指示的記憶體中的資料.
2)mov bx ,n;//將暫存器bx賦值為n
3)add ax,bx;將暫存器ax加n.
4)mov [bp+x] ,ax:將變數x所指示的記憶體賦值為暫存器ax中的資料.
erlang為了併發而生,它採用的是訊息模型,程序間並不共享任何資料,也就完全避免了引入鎖的必要。
不僅如此,erlang在程式設計模型上走的更遠,它在語言級別提供了一系列的併發原語,通過原語,可以用程序+訊息的模型來建模實現世界中多人協作的場景.乙個程序表示乙個人,人與人之間並不存在任何共享記憶體,彼此之間的協作完全通過訊息(說話、打手勢、做表情、等等)互動來完成。這就是每乙個人生而知之的併發模式!軟體模擬現實世界協作和互動的場景———這也就是所謂的cop(面向併發程式設計)思想.
在錯誤處理上,erlang也有與眾不同的設計決策,這使得實現「容錯系統」不再遙不可及。cop假設程序難免會出錯,它假設程式隨時可能會出錯,如果發生出錯的情況,則不要嘗試自行處理,二十直接退出,交給更高階的程序來對這種情況進行處理。通過引入「速錯」和「程序監控」的概念,我們將錯誤分層,並有更高層的程序來妥善處理,有了這樣的概念支撐,構造「容錯系統」就易如反掌.
出了掌握語言本身之外,還要掌握精微思辨的軌跡,從乙個不起眼的小問題開始,從巨集觀分析到微觀實現,層層深入細細道來,問題是什麼?要如何建模?該怎麼重構?各個版本之間的精微演化全然呈現,但這些微小的改進,最終演化出那些讓人驚喜的特性,整個過程可謂相當精彩.
Erlang 學習筆記(一)
erlang 學習筆記 一 guibin.beijing gmail.com 本學習筆記為初級教程,是對 url 的總結,也是我個人學習過程中的總結。請各位高手指點,並給出學習建議,謝謝。size large 1.順序程式設計設計 sequential programming size size m...
Erlang學習筆記(二)
今天在練習map對映組的時候 本人erlang版本17.01 根據 erlang程式設計 第二版這本書上操作,在取值的時候發現問題,如下 書中操作 如下圖 明顯兩個程式執行不一樣,後來看到官方文件,才發現是這個樣子 在上圖中明確指出,在map對映組中取值的時候用 取值,後來又看了看兩者區別發現兩者只...
Erlang學習筆記(二)
erlang的併發特性源自語言本身而並非作業系統。它把現實世界模擬成一系列的程序,其間僅靠交換訊息進行互動,因此erlang簡化了並行程式設計。在erlang世界中,存在並行程序但是沒有鎖,沒有同步方法,也不存在記憶體汙染的可能,因為erlang根本沒有共享記憶體.erlang程式可以由幾百萬個超級...