erlang otp并发编程实战

搬运下存到云笔记的东西

 

目录结构

-doc

-ebin

-include

-priv

-src

 

应用元数据文件

ebin/simple_cache.app

{

application, simple_cache,

[{description, "A simple caching system"},

{vsn, "0.1.0"},

{modules, [

sc_app,

sc_sup

]},

{registered, {sc_sup}},

{applications, [kernel, stdlib]},

{mod, {sc_app, []}}

]}.

 

启动应用

1.

编译src目录下所有代码

erlc -o ebin src/*.erl

windows下erlc编译错误:

E:\my_server>erlc -o ebin src/*.erl

e:/my_server/src/*.erl:none: I/O error

 

erlc -o ebin src/*.erl命令在linux上是能够正常工作的,但在windows上却出现问题。原因是linux下的shell能够自动解释*.erl,windows shell却没有这样的功能。

我们可以使用for...do语句来解决 :(首先确保新建项目中有src和ebin文件夹)

for %%f in (src/*.erl) do erlc -o ebin src/%%f

注意,for语句中的变量需要用%%f来表示,如果是在命令行中则需要改为%f

即 cmd>for %f in (src/*.erl) do erlc -o ebin src/%f

for %f in (src/*.erl) do erlc -o src src/%f (备用)

Linux

在Linux下,可以直接这样:

root@compute0:~/Mangix# erlc -o ebin src/*.erl

 

2. erl -pa ebin

application:start(simple_cache).

 

proc_lib没模块是erlang stdlib应用的一部分,利用它可以按otp的方式来启动

进程,他会安装otp的一些必要规范对进程进行设置,最好用proc_lib:spawn

来启动进程

 

节点的启动

给erl、werl加上-name,-sname就可以以分布式模式启动erlang节点

例如:erl -name simple_cache, erl -sname simple_cache

 

nodes().查看除了自身的节点

节点互联 net_adm:ping('b@ZWWXD164').

通信成功返回pong,否则pang

检查系统中运行的进程

ps ax | grep -i epmd

EPMD代表erlang端口映射守护进程

检查当前erlang节点的cookie, auth:get_cookie().

可通过set_cookie(Node, Cookie)设置不同节点的不同cookie

在 Erlang shell 中按下^G键,就可以看到作业控制模式(JCL mode)的菜单

q().是inits:stop().的简写,安全退出使用ctrl g,ctrl c

 

erl -sname mynode -pa ..simple_cache/ebin -pa ./resource_discovery/ebin

application:start(sasl).

mnesia:start().

 

-----------------------------

打包部署:

application:start(AppName, temporary)应用意外终止,运行时系统其它部分不会受影响

application:start(AppName, permanent),应用是目标系统中不可或缺的组成部分

发布镜像文件拓展名.rel,

simple_cache.rel

{release,

{"simple_cache", "0.1.0"},

{erts, "5.7.2"},

[ {kernel, "2.13.2"},

{stdlib, "1.16.2"},

{sasl, "2.1.5.3"},

{mnesia, "4.4.10"},

{resource_discovery, "0.1.0"},

{simple_cache, "0.3.0"}

]}.

 

unix系统按ctrl-c呼出break菜单,werl下ctrl-break,进入选项v

调用systools模块(SASL应用的一部分)来生成.boot和.script文件

systools:make_script("simple_cache", [local]).

(修改了.script文件,重新生成.boot文件用systools:script2boot(Release))

 

配置文件sys.config

[

{sasl, {sasl_error_logger, {file, "/tmp/simple_camp.sasl_log"}}},%sasl log path

{simple_cache, [contact_nodes, ['contact1@localhost', 'contact1@localhost']]}

% 联络节点节点名

].

 

启动目标系统

erl -sname cache -boot ./simple_cahce -config ./sys -detached

% -detached 加上是不期望打开erl shell 让其以守护进程的形态在后台运行

appmon:start(). 可监视查看otp状态

 

创建发布镜像包

systools:make_script("simple_cache", []).

systools:make_tar("simple_cache", [{erts, code:root_dir()}]).

erts选项表示运行时系统(ERTS)也要一并打包在内,这样创建出的

发布镜像可以在任何兼容主机上安装和启动,code:root_dir()定位ERTS的安装根目录

解压 tar -xzf ./simple_cache.tar.gz

erl shell中解压

erl_tar:extract("simple_cache.tar.gz", [{cwd, "tmp"}, compressed]).

 

http://erlware.org/ 自动化打包安装工具

 

性能调优

计算调用次数

%编译代码

cprof:start().

% 运行代码

cprof:pause().

cprof:analyse(module).

cprof:stop().

 

fprof测定执行时间

% 编译代码

fprof:trace(start). % 开始 跟踪

% 代码run

fprof:trace(stop).

fprof:profile(). % 处理跟踪过程

fprof:analyse({dest, "module.txt"}). % 分析

 

erlang:hibernate(Mode, Func, Args)可令进程休眠

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值