`
mryufeng
  • 浏览: 966525 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

进程字典到底有多快

阅读更多
一直以来 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,差了一个数量级别。

结论:合适的场合 猛用。


分享到:
评论
6 楼 mryufeng 2010-04-15  
变量不可变挺好呀! 除了在性能苛刻的地方 你需要类似ets或者其他的手段交换全局信息
5 楼 hittyo 2010-04-15  
看了一下老大之前的文章似乎对于变量不可变语义思想有些不宵

试问变量不可变的思想该怎么理解透彻?
4 楼 mryufeng 2010-04-14  
hittyo 写道
process dict除开 put get erase还有其它的函数没?

字典最基本的操作, 其他的也不需要把...
3 楼 hittyo 2010-04-14  
process dict除开 put get erase还有其它的函数没?
2 楼 mryufeng 2009-08-05  
几个高性能的开源软件如mochiweb rabbitmq都大量用了dict,除了性能上的优势, 代码也简单。
1 楼 litaocheng 2009-08-05  
哈哈,够猛。怪不得mochiweb把解析的数据放到process dict,称其为cache。
果真猛!

相关推荐

    python2.7_多进程

    kwargs表示调用对象的字典。name为别名。group实质上不使用。 # 方法: is_alive()、join([timeout])、run()、start()、terminate()。其中,Process以start()启动某个进程。 # # 属性: authkey、daemon(要通过...

    python多线程多进程的常用操作。

    python多线程多进程的常用操作。包括 1. 调用进程 2. 进程池 3. 进程通信 Pipe,Queue 4. 调用线程 5. lock 6. threading.local() 在一个线程内,递归调用函数时,传递参数显得复杂,因此把参数保存在一个字典里,...

    python多进程 主进程和子进程间共享和不共享全局变量实例

    Python 多进程默认不能共享全局变量 主进程与子进程是并发执行的,进程之间默认是不能共享全局变量的(子进程不能改变主进程中全局变量的值)。 如果要共享全局变量需要用(multiprocessing.Value(“d”,10.0),数值)...

    web路径探测工具 7kbscan-WebPathBrute 1.5.8 (集成三字典)

    使用与更新说明 1.5.8 Beta 2018-01-28 一、增加了几个变量 %DomainNoPoint%为当前扫描目标域名...另外说一句字典有点乱我也没有精力去仔细弄了希望有人能整理一份分享给大家也可以私下联系我我来收集整理多谢大家

    Erlang6大数据存储方式总结

    个人学习Erlang对于Erlang处理数据的各种方式的总结,讲述编程语言Erlang的ets,dets,mnesia,mysql,dict,和进程字典的用法,希望能帮助读者在这个总结里学到一些东西.

    精品课件 Python从入门到精通 第6章 字典与集合(共8页).ppt

    Python从入门到精通 第6章 字典与集合.ppt Python从入门到精通 第7章 字符串.ppt Python从入门到精通 第8章 Python中使用正则表达式.ppt Python从入门到精通 第9章 函数.ppt Python从入门到精通 第10章 面向对象程序...

    Erlang中的注册进程使用实例

    主要介绍了Erlang中的注册进程使用实例,本文给出正常进程通信实例和使用使用注册进程通信实例,需要的朋友可以参考下

    浅谈Python 多进程默认不能共享全局变量的问题

    主进程与子进程是并发执行的,进程之间默认是不能共享全局变量的(子进程不能改变主进程中全局变量的值)。如果要共享全局变量需要用(multiprocessing.Value(“d”,10.0),数值)(multiprocessing.Array(“i”,[1,2,...

    精品课件 Python从入门到精通 第18章 使用进程和线程(共18页).pptx

    Python从入门到精通 第6章 字典与集合.ppt Python从入门到精通 第7章 字符串.ppt Python从入门到精通 第8章 Python中使用正则表达式.ppt Python从入门到精通 第9章 函数.ppt Python从入门到精通 第10章 面向对象程序...

    cpie-cn_r148.pdf

    erlang基础学习的好资料。 第1章 Erlang教程 串行编程 数据类型 模式识别 内置函数 并发 第2章串行编程 项式 模式匹配 表达式求值 模块系统 ... 返回多个值 ... 进程字典 网络内核 散列 效率

    gproc, Erlang的扩展进程注册表.zip

    gproc, Erlang的扩展进程注册表 gproc应用程序作者: 超级用户,约瑟夫 Wayne ...扩展进程字典 注释Gproc有两个依赖项:gen_leader 和 edown 。 由于大多数人都不积极使用,所以默认情况下它们不再被获取。要启用 gen_l

    DOS命令字典 很详细

    kill -F 进程名 加-F参数后强制结束某进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内) del -F 文件名 加-F参数后就可删除只读文件,/AR、/AH、/AS、/AA分别表示删除只读、隐藏、系统...

    Oracle10g DBA经常使用的动态性能视图和数据字典

    v$process:当前进程的信息 v$rollname:回滚段信息 v$rollstat:联机回滚段统计信息 v$rowcache:内存中数据字典活动/性能信息 v$session:有关会话的信息 v$sesstat:在v$session中报告当前会话的统计信息 v$...

    shared-memory-dict:一个非常简单的共享内存字典实现

    arg name定义了内存块的位置,因此,如果要在进程之间共享内存,请使用相同的名称 安装 使用pip : pip install shared-memory-dict 锁具 要使用共享内存字典的写操作,请设置环境变量SHARED_MEMORY_USE_LOCK=1 。...

    MATLAB数据字典生成代码-msurrogate:通过Pyro4连接与Matlab的外部python进程接口

    有测试用例以检查身体有效性。 在封闭的光学/机械/信号/电反馈的情况下,噪声建模可以跨物理域进行。 阅读这些功能之后,在查阅干燥文档之前,最容易深入研究一些示例。 ## 特征 ### 一般的 数值为鸭型。 这...

    oracle 优化培训资料

    Oracle server 可以有条理的通过表空间以及段、扩展、数据块控制磁盘空间,表空间(Tablespaces):Oracle database 的数据存储在表空间中。 逻辑结构的层次如下所述: Oracle 数据库至少包含一个表空间。表空间包含...

    破解RAR压缩文件解压工具

    上一次恢复进程意外地停止,则保存恢复方案和摘要,允许用户在恢复完成后自动 关闭计算机压缩文件,不管 WinRAR /RAR 的密码有多长和多复杂,它都可以恢复。 它通过暴力破解、带掩码的暴力破解和字典破解三种模式来...

    RAR Password Unlocker RAR密码破解工具

    上一次恢复进程意外地停止,则保存恢复方案和摘要,允许用户在恢复完成后自动 关闭计算机压缩文件,不管 WinRAR /RAR 的密码有多长和多复杂,它都可以恢复。 它通过暴力破解、带掩码的暴力破解和字典破解三种模式...

    泰德瑞usb摄像头监控软件

    1、机构应用:该软件适合不想投入太多的有监控需求的家庭、仓库、公司、连锁商店、各种大型的车间、制造业等场地。 2、个人应用:用普通USB摄像头录制各种有意思的视频,例如生活片段、宠物录像;打造自己的迷你...

Global site tag (gtag.js) - Google Analytics