Erlang(2):初步接触并发的编程思想

看了《Erlang程序设计》的开头两章,觉得跟第一版的果然很不同。而且是正版的电子版,文字版的,不是图片。
Erlang是面向并发的语言,它可以创建数以万计的进程来执行程序。
当然这些进程是由Erlang虚拟机管理的轻量级进程,而不是操作系统的进程。
对照C++,Java这些面向对象的语言来看。
Erlang的进程更加像类的对象。


通过声明模块,在别的模块里面就可以创建这些模块:
-module(moduleName).  包含moduleName模块,模块名必须以小写字母开头。
erlang文件以.erl结尾
.作为语句的结尾
模块名是一个原子。


在各自的模块里面,函数默认是私有的,要声明export才能再外部引用。
-export([fun1/n1, fun2/n2, ....]).
导出声明,指出模块里哪些函数可以从模块外部进行调用,类似与C++的public声明。
导出多个函数,fun1为函数名,n1为参数个数。


进程之间是不共享数据的,所以不需要担心在C++里面出现的死锁之类的东西。其实我都没怎么接触过C++的多进程。
进程之间的通信,要通过发送消息来执行。
spawn(ModName, FuncName, [Arg1, Arg2, ..., ArgN])
spawn是erlang基本函数,创建一个并发进程,并返回一个进程标识符。
不是创建系统进程,而是创建的是Erlang系统管理的轻量级进程。
模块类似于C++的类。
进程则类似于C++的对象。
Pid ! Msg 发送消息Msg到进程Pid。
接收消息
receive
{From, Message} ->
...

end

在这里可以想象得到,程序应该会比C++慢很多很多,如果是在一个单核的计算机上面。

因为没有C++那种函数调用,引用传递,指针传递。几乎每一个函数调用,都是进程之间的通信。

而且数据不能共享,导致很多地方要信息不停打包,复制。

所以要充分发挥多核应用的优势,才能摆脱这种劣势。

不过设计思想果然很新颖。


posted @ 2017-01-13 18:34  肥宝游戏  阅读(208)  评论(0编辑  收藏  举报