浏览 2011 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-22
最后修改:2010-03-23
erlang中每一个thread的叫法是process,可能行为上更像进程吧。 语法: 1,new一个process:spawn(module_name, exportFunction, argsList)。 例如:spawn(tut, say_something, hello). 其中tut是module的名字,say_something是tut中export的方法,atom类型的hello是方法say_something的参数。 2,process之间的通讯: receive方法:接收消息的方法。每一个process都有自己的input queue。每次receive执行对queue中消息进行匹配接收,如果第一个消息匹配失败,则进行第二个消息匹配,直到匹配成功,如果所有都失败,则当前process将wait新的message进行匹配。receive语法: receive pattern1 -> actions1; pattern2 -> actions2; .... patternN actionsN end. process之间消息可以是简单合法的erlang中的terms。比如list,tuple,integer,atom,pid等(pid就是process的ID,由spawn返回)。 Pid ! Message: 这是发送消息的方法。例如:PID ! hello. PID01 ! {hello, self()} (其中self()方法返回的是当前process的pid)。 3,注册process: register(some_atom, Pid)。 例如:register(process2, spawn(tut, say_something, [hello]))。 然后就可以直接用process2代表spawn返回的pid。 分布式: 首先,erlang对分布式的安全有鉴权。最简单的方法就是在每一台分布式环境下的机器中的home目录下放一个文件".erlang.cookie",当然,文件里的内容也要一样的。这里注意一下,所说得home目录并不是指运行erlang的根目录,在windows中通过path中的HOME环境变量来指定,在linux和unix中,cd所进入的目录就是home目录。 至于文件的内容嘛,根据官方文档描述,只是一个atom。例如:helloworld。可能是初衷于手机使用,校验简单节省资源的原因吧。 同一个IP domain,一个node启动erlang系统的命令:erl -sname node1 不同IP domain,则用-name代替 -sname 访问process:普通环境下直接访问process的ID即可。分布式下以这种方式访问:{registered_name,node_name} 例如:{process1, process1@node1}。 先写到这,累了,后续...... 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |