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假设进程难免会出错,它假设程序随时可能会出错,如果发生出错的情况,则不要尝试自行处理,二十直接退出,交给更高级的进程来对这种情况进行处理。通过引入“速错”和“进程监控”的概念,我们将错误分层,并有更高层的进程来妥善处理,有了这样的概念支撑,构造“容错系统”就易如反掌.

出了掌握语言本身之外,还要掌握精微思辨的轨迹,从一个不起眼的小问题开始,从宏观分析到微观实现,层层深入细细道来,问题是什么?要如何建模?该怎么重构?各个版本之间的精微演化全然呈现,但这些微小的改进,最终演化出那些让人惊喜的特性,整个过程可谓相当精彩.


Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐