- 浏览: 982206 次
- 性别:
- 来自: 广州
最新评论
-
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 otp标准发布包里面的命令行工具都在bin目录下
dialyzer
erlc
escript
typer
erlang的这些命令行工具基本上都是erl模块的c的wrapper, 最后都是调用erl来运行相应的模块完成任务。
实验如下:
root@nd-desktop:~# touch test.erl
root@nd-des ...
GNU libreadline 为行编辑提供了统一的接口和方便的编辑能力,在使用中感觉非常爽。但是不是所以的应用程序都使用了readline库来读取用户输入,大部分C程序只是简单的调用fgets。这样的程序在输入的时候非常痛苦。比如erl,为了移植性没用到readline,而是自己实现了类似readline那样的基本的行编辑,但是非常难用,例如不支持CTRL A, CTRL E等等。
这时候rlwrap来救助了。
rlwrap runs the specified command, intercepting user input in order to provide readline's ...
下载地址:
http://blog.yufeng.info/ppt
欢迎参观指导。。。
昨天新发布的Go还是很不错的,而且随机带了个emacs的模式 用起来很方便。
root@nd-desktop:/usr/src/golang# pwd
/usr/src/golang
root@nd-desktop:/usr/src/golang# ls misc/emacs/
go-mode.el go-mode-load.el
root@nd-desktop:/usr/src/golang# cp misc/emacs/*.el ~/.emacs.d
root@nd-desktop:/usr/src/golang# cat >> ~/.emacs
(setq load- ...
刚从11月7-8号在杭州举行的ecug会议上回来,这次会议总体感觉是 大家都在开始用erlang了,这是个很好的现象。
附件是我的演讲稿。
- 2009-11-10 13:40
- 浏览 2963
- 评论(2)
erl的虚拟机有2种方式 plain版本的和smp版本的。 smp版本由于锁的开销相比要比plain版本的慢很多。 而32位机器由于内存访问比64位的少,也会快出很多。所有我选择在32位的linux系统下调优这个httpd服务器。 这个服务器就是实现个简单的功能,在browser下返回hello world。 以下我们会先编译我们的优化版本的虚拟机,然后再分别测试R13B02的标准版本的和我们优化版的性能:
root@nd-desktop:/build_opt_plain# uname -a
Linux nd-desktop 2.6.31-14-generic #3 SMP Sun Nov 1 ...
我们在探索linux内核的时候,经常需要调整下变量的值,看它对系统的影响。如果这个值没有透过/proc来修改的话,那只能编译内核。这个步骤是非常繁琐的。现在我们有systemtap这个利器来帮忙了。
演示如下:
我们通过修改过
extern int sysctl_tcp_fin_timeout;的值来达到目的。是因为这个值是proc导出的 我们好验证是否成功。
root@localhost ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout
15000
[root@localhost ~]# cat test.stp
probe begin
{
...
gen_server在erlang otp编程中的地位是无可撼动的,几乎都是gen_server或者gen_fsm的模型。那么程序运行起来的时候 我们如何查看gen_server的内部状态呢。有2种方法:
1. 自己写个类似于info这样的函数,来获取状态。
2. 利用系统现有的架构。sasl应用带了一个si的东西 全名是status inspector, 这个东西就是设计来帮用户解决这个问题的。
实验开始:
root@nd-desktop:~# cat abc.erl
-module(abc).
-behaviour(gen_server).
-export([start_link/0]). ...
erlang内置的port非常强大,是erlang通往外面世界的通道,所以port和erlang程序的通讯的数据格式影响了通讯的效率,和稳定性。 我们在选择格式的时候, 会优先考虑到erlang的特性和port程序编写语言的特点,选出一种2者都容易处理的格式。
通讯通常有2种,基于行的文本和2进制格式。
行通讯最容易,因为是文本,调试起来就很方便。 形如这样的格式:
request args\n erlang编码这种格式就是加个\n, 解码可以用driver的{line, xxx}选项。而外部程序比如说c 解码可以用fgets, 编码也是加个\n. 缺点是: 表达上比较受限 不好表示结构数 ...
R13B新添加的leex相当于c的lex, 在做文法分析非常方便,但是效率如何呢? leex的example里面带了个erlang_scan和erlang标准的发布版的erl_scan兼容,所以我们来对比测试下效率。
注意用R13B03,因为R13B02的erlc漏掉了编译xrl格式。
以下是实验:
root@nd-desktop:~# git clone git://github.com/rvirding/leex.git
root@nd-desktop:~# cd leex/examples/
root@nd-desktop:~/leex/examples# cat test_scan ...
以下是会议议程安排。更多信息访问: http://ecug.org/
2009-11-6
* 讲师入住酒店
* 会务人员&讲师小聚
2009-11-7
08:30 ~ 09:00 签到
09:00 ~ 09:15 开场
09:15 ~ 10:15 成立涛 - Erlang开发实践
10:15 ~ 10:30 提问&交流
10:30 ~ 11:30 余锋 - Erlang系统调优
11:30 ~ 11:45 提问&交流
11:45 ~ 12:00 集体拍照留念
12:00 ~ 13:00 午餐
13:00 ~ 13:30 休息
13:30 ~ 1 ...
- 2009-10-12 12:06
- 浏览 1729
- 评论(3)
erlang的代码运行有2种方式 1. 编译成opcode 2. eval. 这2种形式都需要把erl代码翻译成abstract code, 然后在不同的途径分别开.
通常情况下我们在eshell 里面输入的东西都是动态eval的. erl还支持命令行动态解释. erl -eval e
init.erl
start_it({eval,Bin}) ->
Str = binary_to_list(Bin),
{ok,Ts,_} = erl_scan:string(Str),
Ts1 = case reverse(Ts) of
[{dot ...
原本以为在 64位操作系统下 文件的读写指针都改成64位的 避免了2G的限制。经过测试 disk_log和file都支持超过2G的数据文件,但是 dets还是可耻的失败了。 经过查看源码 有2个问题:
1. key segment的问题。 dets在设计的时候 是针对32位的 那么它的空间限制就是2G, 所以在计算最大的段的数的最大的偏移时候 干脆在代码里面写死了2G。
2. 偏移的问题。 每个key对应的value在dets_v9文件格式中的偏移值是用 <<Off:32>> 这样的格式来表示的。 所以如果改变成64位 那么文件格式就完全不兼容了。
结论: ...
ejabberd最新的版本有个模块叫做 dynamic_compile, 支持从string动态加载一个模块。有了这个功能我们就可以很方便的动态生成一个模块,加入到我们的运行期。我想的有以下几个功能:
1. const 模块
2. 如日志系统的级别:
log(S) when 0 > 1 ->
do_log(S);
log(_)->
skip.
这样的模块 编译的时候 会把前面的就省去了判断, 直接由compiler去掉了,因为when永远不满足。
试验如下:
yu-fengdemacbook-2:~ yufeng$ erl
Erlang (BEAM) e ...
前端时间看到JVM的 64 pointer compress技术,蛮多感慨的。具体的可以 google
64位 pointer compress 来了解更多。
好不容易从32位系统中逃脱,解决了4G内存的问题,而且64位的cpu更多的寄存器, 可以带来更好的性能。但是怎么又碰到问题了。64位的系统,64位的指针,意味着更多的数据访问, cpu速度是提高了,但是内存的带宽和访问速度没有大的提高。 而且内存的访问速度和cpu的cycle差几个数量级别,所以对于普通的网络程序来讲,大部分是处理信息的变形,也就是说是把内存里面的数据从一个形式变成另外一个形式。 cpu性能的提高对这种程序来讲 影响不 ...