Chinaunix首页 | 论坛 | 博客
  • 博客访问: 167053
  • 博文数量: 25
  • 博客积分: 548
  • 博客等级: 中士
  • 技术积分: 229
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-11 18:48
文章分类

全部博文(25)

文章存档

2012年(2)

2011年(23)

分类: LINUX

2011-05-10 20:07:21

1. Simple_one_for_one和one_for_one的区别
Simple_one_for_one:子进程都是动态加载的
When started, the supervisor will not start any child processes. Instead, all child processes are added dynamically by calling: supervisor:start_child(Sup, List)
2. gen_server:start_link的返回值
gen_server:start_link({local, ch3}, ch3, [], []) => {ok, Pid}
gen_server:start_link/4,产生新进程(一个 gen_server)并与之连接。
总结:借助gen_server:start_link调用,你可以启动gen_server行为包。其结果是生成调用init/1回调函数的一个新进程。这个函数初始化了LoopData并返回元组{ok,LoopData}。
3. gen_tcp
{active,true},确保所有从套接字接收的消息都作为Erlang消息转发到拥有这个套接字的进程。当打开一个套接字时,默认值是主动模式。如果套接字以主动模式打开,那么拥有套接字的进程将收到形式为{tcp,Socket,Packet}或者{tcp_error,Socket,Reason}的消息,其中Socket是接收套接字而Packet是消息本身。
{active,false} 设置套接字为被动模式。套接字收到的消息被缓存起来,进程必须通过函数gen_tcp:recv/2和gen_tcp:recv/3调用读取。{active,once} 将设置套接字为主动模式,但是一旦收到第一条消息,就将其设置为被动模式,并使用recv函数来读取后续的消息。
4. Inet模块
Inet模块包含和套接字一起使用的通用函数,它提供了套接字通用的访问方法以及有用的库函数。
5. convert({X, _}, Y) ->
{cannot,convert,X,to,Y}.
下划线代表匿名变量或者无所谓变量,在语法要求需要一个变量但又不关心变量的取值时,它用做占位符。子句中变量的生存期从它首次被绑定时开始,到子句中对该变量的最后一个引用处结束。
6. BIF-内置函数
有一些操作使用Erlang无法完成,或无法高效完成,Erlang提供了若干内置函数(built-in function)用于完成这些操作。
7. 并发
Erlang是一门并发编程语言,这意味着在Erlang中可直接对并行活动(进程)进行编程,并且其并行机制是由Erlang而不是宿主操作系统提供的。为了对一组并行活动进行控制,Erlang提供了多种进程原语:spawn用于启动一个并行计算(称为进程),send向一个进程发送一条消息,而receive从一个进程中接收一条消息。
注:gen_server中实际是封装了Erlang提供的这些操作,从而实现了进程的创建,消息发送\接收以及处理过程。
8. 理解多进程思想
一个进程是一个独立自治的计算单元,它与系统中其他进程并行地存在。进行进程间通信的唯一方法就是消息传递。发送消息是一个异步操作,因此send既不会等待消息送达目的地也不会等待对方收到消息。就算发送消息的目标进程已经退出了,系统也不会通知发送者。每个进程有一个邮箱,所有发送到该进程的消息都被按照他们到达的顺序依次存储在邮箱里。所有未匹配的消息会被留在邮箱中,保证系统不要完全被这样无关的消息填满就成了程序员的责任。

 

阅读(1967) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~