一直以来 erlang的几本书的作者都建议不要用process dict,倒不是它的性能不好,而是因为process dict破坏了fp的变量不可变语义,所以引起了不好的印象。其实在很多场合,是很合用的。process dict 有几个好处:
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,差了一个数量级别。
结论:合适的场合 猛用。
分享到:
- 2009-07-29 16:47
- 浏览 9785
- 评论(6)
- 论坛回复 / 浏览 (6 / 3302)
- 查看更多
相关推荐
kwargs表示调用对象的字典。name为别名。group实质上不使用。 # 方法: is_alive()、join([timeout])、run()、start()、terminate()。其中,Process以start()启动某个进程。 # # 属性: authkey、daemon(要通过...
python多线程多进程的常用操作。包括 1. 调用进程 2. 进程池 3. 进程通信 Pipe,Queue 4. 调用线程 5. lock 6. threading.local() 在一个线程内,递归调用函数时,传递参数显得复杂,因此把参数保存在一个字典里,...
Python 多进程默认不能共享全局变量 主进程与子进程是并发执行的,进程之间默认是不能共享全局变量的(子进程不能改变主进程中全局变量的值)。 如果要共享全局变量需要用(multiprocessing.Value(“d”,10.0),数值)...
使用与更新说明 1.5.8 Beta 2018-01-28 一、增加了几个变量 %DomainNoPoint%为当前扫描目标域名...另外说一句字典有点乱我也没有精力去仔细弄了希望有人能整理一份分享给大家也可以私下联系我我来收集整理多谢大家
个人学习Erlang对于Erlang处理数据的各种方式的总结,讲述编程语言Erlang的ets,dets,mnesia,mysql,dict,和进程字典的用法,希望能帮助读者在这个总结里学到一些东西.
Python从入门到精通 第6章 字典与集合.ppt Python从入门到精通 第7章 字符串.ppt Python从入门到精通 第8章 Python中使用正则表达式.ppt Python从入门到精通 第9章 函数.ppt Python从入门到精通 第10章 面向对象程序...
主要介绍了Erlang中的注册进程使用实例,本文给出正常进程通信实例和使用使用注册进程通信实例,需要的朋友可以参考下
主进程与子进程是并发执行的,进程之间默认是不能共享全局变量的(子进程不能改变主进程中全局变量的值)。如果要共享全局变量需要用(multiprocessing.Value(“d”,10.0),数值)(multiprocessing.Array(“i”,[1,2,...
Python从入门到精通 第6章 字典与集合.ppt Python从入门到精通 第7章 字符串.ppt Python从入门到精通 第8章 Python中使用正则表达式.ppt Python从入门到精通 第9章 函数.ppt Python从入门到精通 第10章 面向对象程序...
erlang基础学习的好资料。 第1章 Erlang教程 串行编程 数据类型 模式识别 内置函数 并发 第2章串行编程 项式 模式匹配 表达式求值 模块系统 ... 返回多个值 ... 进程字典 网络内核 散列 效率
gproc, Erlang的扩展进程注册表 gproc应用程序作者: 超级用户,约瑟夫 Wayne ...扩展进程字典 注释Gproc有两个依赖项:gen_leader 和 edown 。 由于大多数人都不积极使用,所以默认情况下它们不再被获取。要启用 gen_l
kill -F 进程名 加-F参数后强制结束某进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内) del -F 文件名 加-F参数后就可删除只读文件,/AR、/AH、/AS、/AA分别表示删除只读、隐藏、系统...
v$process:当前进程的信息 v$rollname:回滚段信息 v$rollstat:联机回滚段统计信息 v$rowcache:内存中数据字典活动/性能信息 v$session:有关会话的信息 v$sesstat:在v$session中报告当前会话的统计信息 v$...
arg name定义了内存块的位置,因此,如果要在进程之间共享内存,请使用相同的名称 安装 使用pip : pip install shared-memory-dict 锁具 要使用共享内存字典的写操作,请设置环境变量SHARED_MEMORY_USE_LOCK=1 。...
有测试用例以检查身体有效性。 在封闭的光学/机械/信号/电反馈的情况下,噪声建模可以跨物理域进行。 阅读这些功能之后,在查阅干燥文档之前,最容易深入研究一些示例。 ## 特征 ### 一般的 数值为鸭型。 这...
Oracle server 可以有条理的通过表空间以及段、扩展、数据块控制磁盘空间,表空间(Tablespaces):Oracle database 的数据存储在表空间中。 逻辑结构的层次如下所述: Oracle 数据库至少包含一个表空间。表空间包含...
上一次恢复进程意外地停止,则保存恢复方案和摘要,允许用户在恢复完成后自动 关闭计算机压缩文件,不管 WinRAR /RAR 的密码有多长和多复杂,它都可以恢复。 它通过暴力破解、带掩码的暴力破解和字典破解三种模式...
上一次恢复进程意外地停止,则保存恢复方案和摘要,允许用户在恢复完成后自动 关闭计算机压缩文件,不管 WinRAR /RAR 的密码有多长和多复杂,它都可以恢复。 它通过暴力破解、带掩码的暴力破解和字典破解三种模式来...
1、机构应用:该软件适合不想投入太多的有监控需求的家庭、仓库、公司、连锁商店、各种大型的车间、制造业等场地。 2、个人应用:用普通USB摄像头录制各种有意思的视频,例如生活片段、宠物录像;打造自己的迷你...