Erlang 学习笔记
函数的返回值
函数不会显示地返回值,函数中最后一条语句的执行结果将作为函数的返回值。
?
客户端通过 API 调用 gen_server:call(Name, Request)?向服务器发出请求,
其实是把请求以消息的形式发送到服务器的 mailbox, 然后 gen_server 内部的 loop
从 mailbox 取出请求,把它交给对应的 handle 去处理。
?
一个 gen_server 的例子。
?
?
这篇文章讲述了如何使用 OTP 实现进程池,文章讲的很清楚,这里再补充一下整个程序的流程.
1 首先调用 ppool_supersup 的 start_link 方法创建超级监控进程。
2 调用?ppool_supersup:start_pool 创建 ppool_sub 监控进程,而在
? ? ppool_sub 的 init 方法中又会创建 ppool_serv 进程,在 ppool_serv
? ? 的 init 方法中向自己发送消息,然后引起 handle_info 得到调用,在
? ? 这里创建 worker_sup 监控进程。之所以要在 ppool_serv 中启动 woker_sup 。
? ? 是因为 ppool_serv 要和 worker_sup 通信,因此要保存 worker_sup 的进程 ID
?
组织 OTP 工程的结构。
?
erl -makeerl -pa ebin/application:start(ppool).ppool:start_pool(nag, 2, {ppool_nagger, start_link, []}).ppool:run(nag, ["finish the chapter!", 500, 10, self()]).ppool:run(nag, ["Watch a good movie", 500, 10, self()]).flush().?
?
Behaviour
Remember that behaviours are always about splitting generic code away from specific code.?