从去年开始研究java并发编程,对java的多线程,各种锁,线程池都有一定的了解。再加上看了一部分周伟明老师的《多核计算与程序设计》和《多核编程艺术》,总感觉多核时代的编程模式让程序员很痛苦。程序员不对软件和硬件知识做深入了解,要开发出具有高性能,高可用,高伸缩性的程序不是那么容易,特别是同步,锁,原子性,程序活性让很多从事软件开发多年的资深程序员都搞得不太清楚。而云计算时代,多核,多任务,多系统交互,程序之间的独立性和依赖性都变得越来越强,如何系统之间的关系更简单,如何能充分系统的资源,如何让程序具有高度的独立性,容错性都是我们面对的主要问题。

 

      今年在口碑网上看到了一个java并发编程的程序员圆桌会,主要来至于淘宝,支付宝,阿里云的技术专家们详细深入地介绍了java并发编程的基础知识及各种实践经验,特别是林昊提出的协程比较有意思,感觉java并发编程的模型必须得改,以适应云计算的需求。我对java在并发上的感觉就是它提供了一把宝剑,材质不错,但磨刀石,怎么磨出最锋利的宝剑还得自己去打造,弄得不好或不是能工巧匠很难打造。

 

       最近公司号召我们学习,而近几年云计算的概念也是热火朝天,互联网的大公司无一例外都卷到云了,Amazon,google,yahoo,IBM,Facebook,Twitter,Microsoft,oracle都提供了自己的云,国内的大型互联网公司也在研究。云计算相关的SAAS,PAAS,LAAS都相继提出。云计算的分布式特征非常明显,云计算的最大特点是:分布,互连,容错性,可伸缩性,简单性。再加上硬件的多核时代到来,cpu的核心越来越多,如何充分利用这些硬件资源,是我们软件必须面对的问题。共享内存的多核架构使我们不得不面对并发,多线程,锁这些复杂问题。

 

        Erlang语言被一些同事提起,一直想抽空研究一下,今天有空静下心来看看这个天生并发处理的魅力。Erlang的原理非常简单,基于函数式的编程,我们知道,函数的一些基本要素,输入,输出,处理过程。最纯粹的处理过程是只对输入进行变换处理,不对周围环境变量或者全局变量产生任何影响,输出就是函数的产品。基于函数式的语言天生就具有线程安全性。 Erlang语言提供了超轻量级的进程,据说比创建普通线程的代价还小(有待考查),程序都是基于进程级,进程之间的通信只有一种模式:消息传递。彻底解放了共享内存的多线程模型编程难度。而消息的传递都是异步的,不可靠的。不管进程是否在同一台机器还是不同机器,编程模型都一样,这和我们现实生活的状态一样。人就像进程,而社会提供的各种物质形态就像计算机的各类数据,人的活动就如像运行时函数。人类社会的各种活动改变着物质形态,程序的进程运行改变着数据,如此合乎人类思维的语言并充分解决了原有并发编程中的各种难题。那么,它的局限性在哪里呢?由于还没有仔细研究,但可以看出,原有共享内存方式让多个线程可以共同方式来访问相同的资源,而消息传递方式意味着相同的内容必须要复制一份传递给其他进程。怎么觉得有点像管道。 标题有点吓人,Erlang究竟能解决我们哪些问题呢,还需要继续进行研究,我将会在后续文章中提及。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐