浏览 3318 次
锁定老帖子 主题:进程字典到底有多快
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-29
最后修改:2009-07-29
1. 无锁,所以高速。 2. hash实现。 3. 内容参与gc。 4. 实现的很细致。 5. 变量可变。 以下是试验: root@nd-desktop:~# cat dicttest.erl -module(dicttest). -export([test_put/1, test_get/1]). test_put(N)-> Start = erlang:now(), dotimes(N, fun (I) -> put(I, hello) end), Stop = erlang:now(), N / time_diff(Start, Stop). test_get(N)-> Start = erlang:now(), dotimes(N, fun (I) -> get(I) end), Stop = erlang:now(), N / time_diff(Start, Stop). dotimes(0, _) -> done; dotimes(N, F) -> F(N), dotimes(N - 1, F). time_diff({A1,A2,A3}, {B1,B2,B3}) -> (B1 - A1) * 1000000 + (B2 - A2) + (B3 - A3) / 1000000.0 . root@nd-desktop:~# erl -smp disable +h 9999999 Erlang R13B01 (erts-5.7.2) [source] [rq:1] [async-threads:0] [hipe] [kernel-poll:false] Eshell V5.7.2 (abort with ^G) 1> dicttest:test_put(1000000). 9174480.26569295 2> dicttest:test_get(1000000). 34172105.390379503 3> length(element(2, process_info(self(), dictionary))). 1000000 测试的速度相当的快了。 百万条级别,插入100ns, 查询40ns. 而ets的速度大概是us,差了一个数量级别。 结论:合适的场合 猛用。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-08-05
哈哈,够猛。怪不得mochiweb把解析的数据放到process dict,称其为cache。
果真猛! |
|
返回顶楼 | |
发表时间:2009-08-05
几个高性能的开源软件如mochiweb rabbitmq都大量用了dict,除了性能上的优势, 代码也简单。
|
|
返回顶楼 | |
发表时间:2010-04-14
process dict除开 put get erase还有其它的函数没?
|
|
返回顶楼 | |
发表时间:2010-04-14
hittyo 写道 process dict除开 put get erase还有其它的函数没? 字典最基本的操作, 其他的也不需要把... |
|
返回顶楼 | |
发表时间:2010-04-15
看了一下老大之前的文章似乎对于变量不可变语义思想有些不宵
试问变量不可变的思想该怎么理解透彻? |
|
返回顶楼 | |
发表时间:2010-04-15
变量不可变挺好呀! 除了在性能苛刻的地方 你需要类似ets或者其他的手段交换全局信息
|
|
返回顶楼 | |