- 浏览: 982237 次
- 性别:
- 来自: 广州
最新评论
-
qingchuwudi:
有用,非常感谢!
erlang进程的优先级 -
zfjdiamond:
你好 这条命令 在那里输入??
你们有yum 我有LuaRocks -
simsunny22:
这个是在linux下运行的吧,在window下怎么运行escr ...
escript的高级特性 -
mozhenghua:
http://www.erlang.org/doc/apps/ ...
mnesia 分布协调的几个细节 -
fxltsbl:
A new record of 108000 HTTP req ...
Haproxy 1.4-dev2: barrier of 100k HTTP req/s crossed
文章列表
erlang的tools application下包含了一系列的profile工具, 包括 eprof cprof fprof, 具体的使用可以参看文档和<< erlang effective guide>>.
我这里要说的是他们的工作原理。 这些模块的核心都是根据erlang的trace机制实现的。在模块执行的时候,trace机制会通知那个函数被调用 返回。根据这些信息就可以统计出来函数调用的频度,调用栈等。
但是利用这个机制会有严重的性能损失。因为每个函数调用都要发送一条trace信息,每个trace 信息会引起上下文切换 而且要耗费2-3的时间。这个对大型的系统 ...
我们先看下cover模块的功能:
The module cover provides a set of functions for coverage analysis of Erlang programs, counting how many times each executable line of code is executed when a program is run.
那它是如何做到的呢?
它是这样实现的: cover一个模块的时候要先编译, 这个过程中, 根据模块的abstract code 里面的行号,在每个有效的语句前面插入一个 ets:update_couter() ...
erlang的binary在这个网络程序里面占着非常重要的地位,所以otp团队采用了非常多的优化手段包括:
1. binary操作对应着 opcode
2. 根据生命期和作用,有4种类型的binary
3. hipe优化,把bs_操作直接翻译成asm指令
4. 编译器层面消除无必须的操作。
下面的例子就是演示4的特性:
yu-fengdemacbook-2:~ yufeng$ cat bin.erl
-module(bin).
-export([start/1]).
start(A)->
B1= <<12>>,
B2 = << ...
前些天在erlang的源码里面闲逛的时候发现了 bin目录下的cerl,一看原来是个调试的高级货。
我之前写过一篇文章http://mryufeng.iteye.com/blog/113852 如何调试erlang 但是这是土八路的方法, cerl才是现代化工业。
# This is a script to start Erlang/OTP for debugging. PATH is set to
# include this script so if slave nodes are started they will use this
# script as well.
#
# usa ...
原文地址:http://hyperstruct.net/2007/6/26/literal-xml-in-erlang-with-parse-transform-2
One of the things I dislike about Erlang is that it severely impairs bragging opportunities. Yesterday I wrote a module that allows writing literal XML in the source and have it parsed into Erlang structures at compi ...
- 2009-09-30 21:09
- 浏览 1623
- 评论(0)
erlang的abstract code是编译的中间代码,很多工具如 erl_pp lint什么的都是根据这个做调整的。还有进一步的parse_transform也是基于它的。 所以,了解它非常重要。 erts user guide里面详细了描述了它的定义。我这里展示的是如何获取到某个模块的abstract code 以便进一步研究:
[root@localhost ~]# erl -s hello
Erlang R13B02 (erts-5.7.3) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-pol ...
原文地址:http://erlang-factory.com/upload/presentations/167/KennethLundin-LatestnewsfromtheErlangOTPteamatEricssonErlang_Workshop2009.pdf
Coming Open Source releases
OTP R13B02 September 23
OTP R13B03 November 25
OTP R13B04 Jan-Feb 2010
OTP R13B05 ???
OTP R14B May-June 2010
OTP R14B01
OTP R14B02
Plans ...
erlang otp包里的 cryto很好的贯彻了下面的原则,是个很好的教材:
9 Drivers
This chapter provides a (very) brief overview on how to write efficient drivers. It is assumed that you already have a good understanding of drivers.
9.1 Drivers and concurrency
The run-time system will always take a lock before running any code in ...
- 2009-09-27 15:50
- 浏览 2143
- 评论(0)
Parameterized modules in Erlang
请参考这篇文章 http://ftp.sunet.se/pub/lang/erlang/workshop/2003/paper/p29-carlsson.pdf
我这里讲述的重点是如何实现的。先看代码:
root@nd-desktop:~/test/m# cat main.erl
% File: main.erl
-module(main).
-export([start/0]).
start() ->
M1 = print:new("Humpty"),
M2 = print:new("Du ...
在处理文本文件的时候,基本上是以行为单位处理,特别是unix,无数的工具和算法基于这个line.
erlang在这方面支持的也非常好,极大的方便了用户。 erlang的数据大概有4个来源,在最近的R13B02这些来源都支持行读。
1. IO比如标准输入。
io:get_line([IoDevice,] Prompt) -> Data | eof | {error,Reason}
Types:
Reads a line from the standard input (IoDevice), prompting it with Prompt.
2. port,就是unix的管道,从其他 ...
erlang的标准用法是尽可能的把函数调用写出尾递归的方式,实际的结果靠参数传递。尾递归的方式对进程的堆栈使用很小, 只要一个WORD, 但是非尾递归就要看递归的层数,如果数量很大,会把堆栈撑的很大。我们在汇编一级看下如何实现的:
root@nd-desktop:~# cat tailcall.erl
-module(tailcall).
-export([start/1]).
-compile(export_all).
start(N)->
X = loop(N),
Y = tail_loop(N),
X = Y,
done.
loop(0)-& ...
erlang在smp模式下 默认开启的线程数目是 4 + 调度器数量 + 异步线程的数量。 其中调度器默认=cpu的数目 异步线程的数量默认是0, 可以通过 +A来设置,主要用于文件异步IO操作。 对于现在的机器 可能有大量的cpu 那么默认开启的 ...
erlang节点间通讯是可以配置的,默认的是inet_tcp 。当2个节点要沟通的时候,net_kernel模块会负责建立必要的连接。 inet_tcp会调用底层的gen_tcp进行数据发送接受。 rpc或者节点间的消息交互都是通过这个port出去的。
在分布节点间,有时候会有大量的消息流动,那么所有的消息都是通过这个port出去 进来,所以这个port的性能极大的影响了节点间通讯的效率。那么有时候, 我们会想微调这个port的参数,根据业务的特点实现效率最大化,但是port如何得到呢?
node_port(Node)->
{_, Owner}=lists:keyfind(o ...
Erlang作为一门FP语言,和传统的语言结构一样, 有模块, 有函数, 有语句, 有判断, 有循环, 还有特别的模式匹配。 那么这些在底层是如何运作的。 我在底下给大家做个简单的实验,让大家一窥内部的细节,让大家写码的时候知道个大概。
erlang的VM作为register based的VM, 大概有400条指令.指令分为hot, normal, cold 3大类别。beam_emu.c是vm的实现,hot和cold指令在编译的时候 由脚本生成的,include到beam_emu去的。 hot是热门的操作如list, tuple操作, cold的就是比较偏的指令。
erlang的编译器支 ...
不小心在 lib/mnesia/doc/misc/implementation.txt中找到的, 对于深入理解mnesia实现,阅读源码是很好的参考资料。
Mnesia
1 Introduction
This document aims to give a brief introduction of the implementation
of mnesia, it's data and functions.
Håkan has written other mnesia papers of interest, (see ~hakan/public_html/):
o Resource c ...
- 2009-09-16 15:05
- 浏览 4951
- 评论(6)