`
mryufeng
  • 浏览: 982352 次
  • 性别: 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。
果真猛!

相关推荐

    晴窗 中文字典包

    而“更新说明.txt”文件则会列出字典包的最新更新内容,包括新增词汇、修复错误等,有助于用户了解字典的最新改进,保持其功能的时效性。 在实际应用中,用户可以通过晴窗6.0的界面,轻松查找并查看3Dmax和AE的专业...

    php字典—php快速入门

    通过深入学习以上知识点,结合PHP字典提供的详细信息,无论是初学者还是有一定经验的开发者,都能更好地掌握PHP,从而高效地进行Web开发。实践中不断探索和积累,PHP的魅力将会在您的手中绽放。

    汉字字典TXT

    对于"2位以上词语待研究生成"这部分描述,这可能意味着字典当前只包含了单个汉字,而未涵盖由两个或更多汉字组成的词汇。在汉字文化中,词语是语义的基本单位,它们的组合方式和含义千变万化。若要扩展这个字典,...

    python2.7_多进程

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

    Oracle服务进程如何处理用户进程的请求.doc

    为了确保并发性和一致性,服务器进程在执行这些操作时会使用Shared Pool锁存器,以避免多个进程间的数据冲突。 #### 2. 数据块的读入DB Buffer 在SQL语句被解析完成后,接下来需要读取实际的数据。Oracle数据库...

    完整版 Python高级开发课程 高级教程 08 Python多线程 多进程开发.pptx

    多进程则是在操作系统层面实现的并行执行,每个进程都有独立的内存空间,因此可以充分利用多核CPU资源。在Python中,`multiprocessing`模块提供了创建和管理进程的功能。相比于多线程,多进程更适合CPU密集型的任务...

    125M秒出字典

    通过多线程或多进程技术,将任务分解为更小的部分,同时在多个处理器核心上运行,从而缩短总执行时间。 4. **硬件加速**:利用GPU或其他硬件加速器进行计算,特别是在涉及大量并行运算时,可以显著提升性能。 5. *...

    操作系统之多进程数据共享.pdf

    多进程数据共享 在操作系统中,多进程数据共享是指多个进程之间共享数据的机制。这种机制允许不同的进程之间进行数据交换和共享,从而实现了进程之间的协作和通信。在 Python 中,我们可以使用多种方式来实现多进程...

    U8V11.1数据字典

    《用友U8 V11.1数据字典详解》 用友U8是一款深受中国企业信赖的财务及企业管理软件,其V11.1版本在功能和性能上都有了显著的提升。...熟练掌握数据字典的使用,可以大幅提升工作效率,有效推进企业信息化进程。

    oracle公共字典

    在深入探讨“Oracle公共字典”这一主题之前,我们首先需要理解什么是数据库字典以及它在Oracle数据库系统中的角色和重要性。数据库字典是一种特殊类型的数据库对象,它存储了关于数据库自身结构的信息,包括表、视图...

    nc_iufo数据字典

    通过深入学习《nc_iufo数据字典》,用户可以更好地理解NC系统中的数据结构,提升报表设计和数据分析的能力,从而更有效地利用系统资源,优化企业管理,推动企业信息化进程。同时,对于系统管理员和开发人员来说,...

    K3Cloudqds数据字典.rar

    3. **简化数据分析**:有了详细的数据描述,分析人员可以更快地进行数据挖掘和报表制作。 4. **优化系统集成**:在与其他系统集成时,数据字典提供了一种统一的数据语言,确保数据交换的准确无误。 总的来说,K3...

    简单进程管理器 源码

    4. **进程通信**:进程间通信(IPC)允许不同进程之间交换信息,常见的IPC方式有管道、消息队列、共享内存、信号量等。在简单的实现中,可能会涵盖其中的一种或几种。 5. **进程同步**:为了防止进程间的不协调导致...

    Python-多进程与多线程.pdf

    调用`join()`方法可以使主进程等待子进程结束后再继续执行,这对于同步子进程与父进程的执行顺序很有帮助。 以上是关于Python多进程和多线程编程的核心知识点,理解和掌握这些知识点对于编写并发程序是非常重要的。

    python多进程控制学习小结

    与多线程相比,多进程具有更高的稳定性和安全性,因为每个进程都有独立的内存空间,避免了线程间的共享数据可能导致的问题。 `multiprocessing`模块的核心类是`Process`,它用于创建新的进程。创建进程的基本语法...

    通达OA2013数据库字典(含全部字段注释)20130706.zip_含全部字段注释_通达OA

    因此,这个包含全部字段注释的数据库字典不仅对初始的系统部署有指导作用,也是后续系统维护、数据分析和问题排查的重要参考资料。 总之,通达OA2013数据库字典是系统开发、运维和优化过程中不可或缺的工具。通过...

    AIX 系统命令字典

    17. **rmlog**:清除系统日志,有助于优化系统性能和存储空间。 18. **smit**:System Management Interface Tool,AIX特有的图形化管理界面,可执行常见的系统管理任务。 通过"AIX系统命令字典",你可以迅速查询...

    写了一个数据字典管理工具

    数据字典管理工具是软件开发过程中非常重要的辅助工具,它主要负责存储、管理和维护数据库中的元数据信息。元数据指的是关于数据的数据,如字段名...如果你对这个工具的实现有兴趣,建议访问博客链接获取更多详细信息。

    vb.net 进程关闭,监控源码

    - 创建一个数据结构(如字典或列表)来存储进程名及其分类。 - 遍历`Process.GetProcesses()`返回的进程集合,根据进程名或PID(进程标识符)进行判断和分类。 - 可以使用自定义函数或正则表达式来匹配进程名,...

    汉语字典Sqlite版

    Sqlite是一个轻量级的数据库引擎,它具有体积小、速度快、无需服务器进程支持等优点,特别适合于嵌入式系统和移动设备应用。 本资源的核心是`zidian.db3`文件,这是一个Sqlite数据库文件。打开这个文件,开发者可以...

Global site tag (gtag.js) - Google Analytics