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

ets 到底有多快

阅读更多
R13B的支持ets的并发写,{write_concurrency,bool()} Performance tuning. Default is false, which means that the table is optimized towards concurrent read access. An operation that mutates (writes to) the table will obtain exclusive access, blocking any concurrent access of the same table until finished. If set to true, the table is optimized towards concurrent write access. Different parts of the same table can be mutated (and read) by concurrent processes. This is achieve to some degree at the expense of single access and concurrent reader performance. Table typ ordered_set is not affected by this option in current implementation.

我们来测试下这个性能:
root@nd-desktop:~# cat ets_test.erl
-module(ets_test).
-export([new/0, test_insert/2, test_lookup/2, test_update/2]).

new()->
    ets:new(?MODULE, [public, {write_concurrency, true}]).

test_insert(E, N)->
    Start = erlang:now(),
    dotimes(N, fun (I) -> ets:insert(E, {I, hello}) end),
    Stop = erlang:now(),
    N / time_diff(Start, Stop).

test_lookup(E, N)->
    Start = erlang:now(),
    dotimes(N, fun (I) -> ets:lookup(E, I) end),
    Stop = erlang:now(),
    N / time_diff(Start, Stop).

test_update(E, N)->
    Start = erlang:now(),
    P = self(),
    spawn(fun ()->
                  dotimes(N, fun (I) -> ets:insert(E, {I, hello}) end),
                  P!done
          end),

    dotimes(N, fun (I) -> ets:insert(E, {I, hello}) end),

%% /*2个进程一起写 要比一个要快哦*/


    receive X -> X 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>  E = ets_test:new().             
16397
2> ets_test:test_insert(E, 1000000).
855202.2809955239
3>  ets_test:test_lookup(E, 1000000).
1584148.3776736464
4>  ets_test:test_update(E, 1000000).
1068965.36979788
5> ets:info(E, size).
1000000

^Croot@nd-desktop:~# erl +h 9999999            
Erlang R13B01 (erts-5.7.2) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.7.2  (abort with ^G)
1> E = ets_test:new(). 
16397
2> 
2> ets_test:test_insert(E, 1000000).
673841.2793820066
3> ets_test:test_lookup(E, 1000000).
1250201.595007195
4> ets_test:test_update(E, 1000000).
896912.4685183724 
5> ets:info(E, size).
1000000

可以看到ets的插入和查询操作基本上是在1us左右的级别,相对于process dict的几十ns, 还是差别很大的,因为ets要用2把锁, 一把保护meta table, 一把保护数据表,锁是系统的读写锁。所以这个开销是不容忽视的。

结论: 相比于无锁的数据结构, ets不是非常的快,不过对于一般的应用是够的。

分享到:
评论
5 楼 mryufeng 2009-11-27  
ets是erlang系统的核心服务,当然要不遗余力的让她快。。。
4 楼 linkerlin 2009-11-27  
确实非常的快阿!
3 楼 mryufeng 2009-08-11  
ets并发写的讨论:

http://www.nabble.com/Is-ets:insert-2-(with-multiple-objects)-isolated-with-respect-to--concurrent-readers--td24277077.html
2 楼 mryufeng 2009-08-05  
1。进程内数据dict
2. 跨进程 ets(public,named)
3. 跨节点 mnesia

速度依次差1个数量级。。。相当于硬件的L1, L2, Ram

无敌哦。。。
1 楼 litaocheng 2009-08-05  
好数据~
呵呵,从process dict, ets,到mnesia,各个阶段的设施都有阿。。

相关推荐

    KNX编程软件 ETS5 Professional 版本 5.7.6

    总的来说,ETS5 Professional 5.7.6是一款功能强大且易用的KNX编程工具,它的多语言支持和云端产品数据库是其亮点,为全球用户提供了便捷的工作环境。无论你是初次接触KNX还是有经验的专家,这款软件都能成为你实现...

    KNX编程软件 ETS5 Professional 版本 5.7.4(官网下载)

    1. **多语言支持**:ETS5 Professional 5.7.4特别值得一提的是它对中文的支持,这使得中国以及更多使用中文的工程师和用户能够更加方便地使用该软件,降低了语言障碍,提高了工作效率。 2. **云端产品数据库**:...

    KNX调试软件ETS3附使用说明书.zip

    ETS3支持海格(Hager)等多家设备制造商的产品,确保兼容性。 3. **编程**:ETS3提供了一个强大的编程环境,用户可以通过图形化的编程语言(GVL,Group Value Linking)或EIB/KNX语句来编写控制逻辑。这使得用户能...

    ETS(PHP模板系统)

    通过这个教程,无论是初学者还是有经验的开发者,都能快速掌握ETS的用法,并将其应用到实际项目中。 在实际使用ETS时,开发者可能会遇到以下知识点: 1. **模板文件结构**:了解如何创建和组织模板文件,如如何定义...

    KNX编程软件 ETS5 专业版本 5.7.2

    **ETS5 专业版本 5.7.2:KNX编程软件详解** ETS5(Engineering Tool Software)是KNX协会官方推出的专业编程软件,用于设计、配置和调试基于KNX技术的智能家居系统。这个版本5.7.2是经过精心优化的,特别适合中国...

    KNX编程软件中文版 ETS5 Professional 版本 5.7.6 2021最新版本

    2. **兼容性增强**:增加了对更多新型KNX设备的支持,确保与最新技术同步。 3. **修复已知问题**:解决了之前版本中出现的错误和用户反馈的问题。 4. **用户体验改进**:可能对用户界面进行了优化,使得操作更加简便...

    ets和Dets

    Dets在并发访问控制上也有一定的限制,比如只支持单个写入者,但可以有多个读者同时工作。 在实际项目中,ETS和Dets的选择通常取决于应用场景的需求。对于临时、高速访问且对数据丢失无敏感的应用,可以优先考虑...

    et2022ets新版可以打开ETS文件

    首先,它可能拥有更快的加载速度和优化的内存管理,使得大型ETS文件的处理变得更加流畅。其次,新版本可能引入了更多先进的功能,例如增强的数据可视化、更强大的分析工具和更直观的用户界面,以提升用户的使用体验...

    ETS_ERIC5(2).zip

    在实际使用中,ETS_ERIC5.exe可能会有配套的用户手册或在线帮助文档,详细介绍如何操作、设置以及如何利用username.info和password.info文件进行身份验证。如果这是一个商业软件,它可能还包括许可协议,用户在使用...

    无线通信技术无线—通信的基本概念、无线通信系统、移动通信概论、GSM蜂窝通信系统、华为M900/M1800移动通信系统、ETS450、ETS1900无线接入系统

    根据给定的信息,本文将详细解释无线通信技术中的基本概念、无线通信系统、移动通信概论、GSM蜂窝通信系统、华为M900/M1800移动通信系统以及ETS450、ETS1900无线接入系统。 ### 无线通信的基本概念 无线通信是指...

    ets tooltip截图显示用法实例

    ETS(Enhanced Table Suite)是一款基于ECharts的数据可视化插件,它扩展了ECharts的功能,提供了更丰富的交互体验。在本实例中,我们关注的是ETS的Tooltip功能,特别是其截图显示的特性。Tooltip通常用于在鼠标悬停时...

    HUAWEI+ETS5623+VERE版本升级指导书_SPUpgrade

    《HUAWEI ETS5623 VERE版本升级指导书》是华为针对其ETS5623设备提供的一份重要技术文档,旨在帮助用户和管理员顺利进行系统升级操作。ETS5623作为华为的通信设备,可能在电信网络、企业网络或数据中心等场景中发挥...

    ETS的e-rater揭秘

    ETS的e-rater技术是GRE写作评估中的一个重要组成部分,它是一种自动评分系统,主要用于分析考生的写作样本。这个系统利用先进的自然语言处理(NLP)和机器学习算法,对GRE考试中的Issue和Argument作文进行评分。e-...

    ETS内部培训手册 从ETS角度看GRE阅读文章来源.doc

    ### 从ETS角度看GRE阅读文章来源 #### 引言与背景 GRE作为一项国际标准化研究生入学考试,其阅读理解部分的设计尤为关键。ETS(Educational Testing Service)为了确保GRE阅读理解文章能够达到一定的学术水平和...

    信号灯:使用ETS的快速信号灯

    信号量是一个用于控制对共享资源访问的计数器,它可以在多线程或并发进程之间维护一个计数值。当计数值大于零时,进程可以获取(或“请求”)一个单位的信号量,然后进行操作;当计数值为零时,其他试图获取信号量的...

    真正全部ETS托福185篇范文

    根据给定文件的信息,我们可以提炼出以下IT行业不相关的但对TOEFL写作有帮助的知识点,主要聚焦在教育、职业发展和个人成长方面。 ### TOEFL写作:教育与个人发展的深层次探讨 #### 核心观点一:教育是获取知识与...

    A Study of Erlang ETS Table

    这不仅为内存数据库的设计提供了一种新的思路,也为其他需要高性能数据处理的应用程序提供了一个有价值的参考案例。未来的研究可以进一步探索Judy数组在更多应用场景下的潜力,以及如何优化其在特定硬件平台上的表现...

    汽机危急跳闸ETS调试方案.doc

    总结,汽机危急跳闸ETS调试方案是对电站安全运行的关键步骤,涉及多个层面的检查和验证,确保在紧急情况下,ETS系统能有效保护汽轮机,避免严重损失。调试过程中需要严谨的工艺、详尽的记录以及严格的安全措施,以...

    ets-website-templates

    这个项目可能包含了多个设计模式,用于快速构建ETS相关的网站或者在线平台。 描述中的“可访问性不是功能,而是您所做的一切的基础”强调了网站设计中的一个重要原则——可访问性。这意味着模板不仅关注视觉呈现,...

    600MW亚临界ETS系统在线更换CPU探析.pdf

    【600MW亚临界ETS系统在线更换CPU探析】涉及的知识点主要集中在电力行业的紧急停机系统(ETS)的维护与故障处理上。ETS是保障汽轮发电机组安全运行的重要组成部分,它通过接收传感器的信号来控制停机电磁阀,避免...

Global site tag (gtag.js) - Google Analytics