首先,对于erlang的源码的分析方式的问题。
erlang与C/C++/Java/python都有明显的区别,用OO的方式逆向有些局限性。
erlang是进程式的、消息通信的、模块式组装的,接口调用的语言。
因此尝试了动态调试的方式来解读源码,在关键的接口处给出接口调用时的打印进程ID,模块名,函数名,重要的参数。
其中最重要的一部分调试信息是要tsung启动时的进程之间的关系。
对于erlang来说,进程是最重要的东西,进程又有几个重要的东西。
进程树。
进程的状态,也就是它所维护的数据,不像c/c++/java中的对象数据存在关联,进程的数据都是独立的,私有的。
进程(模块)对外的接口。
进程(模块)之间的通信内容。
其次,对与erlang中的若干概念的理解
gen_fsm定义的状态机与C/C++中定义状态机的方式不同,C/C++中一般都是定义转换表的方式,
特定状态遇到特定的事件时,执行的函数是直接看到的,而gen_fsm这些都是在函数中定义的,隐藏了。
并且erlang中的状态定义与C/C++中的宏式定义不同,它的状态就是处理函数。
erlang定义状态变迁的格式也很奇特{next_state,function,FsmContext}
同时gen_fsm也对事件的产生方式和接收方式给出了要求
gen_fsm:send_event ------------接收2个参数的自定义的状态变迁
gen_fsm:send_all_state_event ------------handle_event
gen_fsm:sync_send_event -------------接收3个参数的自定义的状态变迁
gen_fsm:sync_send_all_state_event -------------handle_sync_event
erlang中的几种模式,supervisor,gen_server,gen_event,gen_fsm
它们都类似C++中的基类,一般都是基类提供运行的框架,派生类提供具体的业务逻辑。
继承erlang中的模式后,需要重新重新它所需的接口就行了,框架就会调用这些重写的方法。
阅读(3061) | 评论(0) | 转发(0) |