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不是非常的快,不过对于一般的应用是够的。
分享到:
- 2009-07-30 00:27
- 浏览 4415
- 评论(5)
- 论坛回复 / 浏览 (5 / 3668)
- 查看更多
相关推荐
资源为视频文件,请用优酷客户端打开播放 ETS编程教程, 本说明是英文版的需要一定的英语基础,有需要软件的也可以给我留言
该程序已用C ++从头开始重写,使其更小,更快。 这个应用程式会同步Euro Truck Simulator 2或American Truck Simulator上的工作清单,以便更轻松地在Multiplayer上组织车队。 截至目前,该应用程序仅以英语提供。...
信号灯:使用ETS的快速信号灯
埃尔普 基于ETS的Erlang进程的Erlang循环负载均衡器 erlpool做什么 ... 假设您有一个gen_server它与Benchmark文件夹中的benchmark_worker相似。 您可以通过以下方式为此创建一个池: application : ens
方便你的深入了解,让你明白其如何分配地址,如何响应。
喜欢的朋友快来下载使用吧! 软件特点: 1、写作练习模块 写作能力的提高过程就是不断集众家之所长,不断吸收消化佳文妙句的过程。本模块提供了超全的必备精彩写作资料:综合写作独立写作模板大全、ETS分类题库、...
泰瑞达连接系统有限公司公司(TCS)推出Ventura高速、高密度连接器,该产品是目前用于单端互连最快的连接器,同时每英寸的信号引脚数量超过同类产品。 Ventura连接器可用于6.25Gbps单端和12Gbps差分应用。用于单端...
打开您的egg应用程序,通过执行ets $ npx ets 通过-w标志监视文件。 $ npx ets -w egg-ts-helper内置在egg-bin ,您可以通过以下方式轻松使用它 $ egg-bin dev --dts 或在package.json添加配置egg.declarations...
最有影响的案例就是ETS(美国教育考试中心)举办的GRE(美国研究生入学考试)的计算机化考试,它使考试由原来的每年只能有两次参加考试的机会变成了每个工作日都可以参加的考试。此系统有着传统考试众多无可比拟的...
与科学计算领域最流⾏的商业软件 MATLAB相⽐,Python是⼀门真正的通⽤程序设计语⾔,⽐MATLAB所采⽤的脚本语⾔的应⽤范围更⼴泛,有更多程序库的⽀持,适⽤于 Windows和Linux等多种平台,完全免费并且开放源码。...
这个峰值非常基础,因为它忽略了很多错误场景。 例如,超时是无限的,因此如果任何 ssh 客户端进程从不发送:ok消息,控制器将永远不会终止。 跑步 克隆 repo 并在其中运行ERL_MAX_ETS_TABLES=20000 iex -S mix ,它...
OpenAperture路由器 这是一个快速的HTTP反向代理,使用Cowboy处理传入的HTTP连接,并使用ETS进行路由查找。 路由器通过Web服务调用检索到正在运行的实例的路由列表。 如果要更改路由器使用的路由列表(例如,出于...
最有影响的案例就是ETS(美国教育考试中心)举办的GRE(美国研究生入学考试)的计算机化考试,它使考试由原来的每年只能有两次参加考试的机会变成了每个工作日都可以参加的考试。此系统有着传统考试众多无可比拟的...
最有影响的案例就是ETS(美国教育考试中心)举办的GRE(美国研究生入学考试)的计算机化考试,它使考试由原来的每年只能有两次参加考试的机会变成了每个工作日都可以参加的考试。此系统有着传统考试众多无可比拟的...
对于需要快速扫描的模块,如ETS保护功能模块,在相应的IO设置为TASK1,逻辑模块设置TASK2时,注意相关逻辑部分要求为同等任务。 在现场调试过程中必须要进行TASK设置的检查,主要根据USERTASK的实际适用的时间进行...
1.1课题背景 SMAR随着计算机技术的发展及计算机的日益普及,基于Web的在线考试与无纸化办公已成为大势所趋。...在国外最有影响的案例就是ETS(美国教育考试中心)举办的GRE(美国研究生入学考试)的计算机
鼻鼓nosedrum是一个与优秀的库一起使用的命令框架。 它包含行为规范,可轻松在您的机器人中实施命令处理,并提供其他... Nosedrum.Storage.ETS提供了基于ETS的命令存储实现。 此外,提供了以下实用程序: Nosedrum.Con
此项目无意成为有史以来最快,最好的软件渲染器。 如果您需要一个,请考虑使用或 。 。怎么跑有三种方法可以做到这一点: Win&Linux:从下载可执行文件。 Windows:使用独立命令。 运行build-and-run.bat 。 ...
conda create -n rstenv -c conda-forge -c ets python=3.8 rstfinder 通过运行conda activate rstfinder激活此conda环境。 现在,在此环境中通过pip安装python-zpar软件包。 这个包允许我们使用ZP
可再生能源是当今世界上增长最快的市场之一。能源存储技术在风能、太阳能和生物能等“绿色”能量产生源中起着重要的作用。应用于能源存储的公共和个人资金正在暴涨,使大量前所未有的研究领域推展到新电池,电容,...