最近接触了款项目,需要使用到Erlang,就把最近的学习心得拿出来分享一下。
首先对于Erlang的适用方向是分布式系统,里面会用到很多的进程来处理业务逻辑,但是这里的进程和我们平常在其他语言里(如:c/c++,java,c#等)进程有很大的区别,我们以前认知的进程都是基于操作系统的进程,是内核级别的,而Erlang里面的进程是基于他的虚拟机之上的进程,是个轻量级的,没有很多内核级别的上下文环境,所以他的应用还是比较方便的。
说到Erlang就不的不说他的经典应用OTP,OTP是Erlang开发者提供的一个应用框架,里面有很多我们常用的基础功能,有gen_server,gen_fsm…,我在学习中就用到了这两个模块。
1.gen_server,是一个回调模块,和win32里面的回调是一个道理,但是比win32封装的更精致,而且他的源码是公开的,有兴趣的可以去看看他的底层实现。
下面来说说他的实现吧。
gen_server有调用模块和处理模块,
调用:
gen_server:call().–同步
gen_server:cast().–异步
接受处理:
handle_call(Request, From, State)–同步
handle_cast(Request, State)–异步
- gen_fsm的调用和处理模块:
调用:
gen_fsm:send_event().–异步
gen_fsm:sync_send_event().–同步
gen_fsm:send_all_state_event().–同步发送给所有状态
接收处理:
Module:StateName/2 异步请求
Module : StateName/3 同步请求
Module:handle_event/3 –接收send_all_state_event()消息的处理。
StateName是自定义的状态处理函数,需要和状态名保持一致。