锁定老帖子 主题:答erlang静态数据查询方式
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-09-05
多谢指点
这么说在多核的cpu上,常量字典的表现应该优于ets 回头我尝试下 |
|
返回顶楼 | |
发表时间:2009-09-14
今天仔细看了下 函数匹配 原理是 把key收集在一起 在opcode i_select_val里面2分查找
汇编码: {select_val,{x,0}, {f,7}, {list,[{integer,4}, {f,3}, {integer,3}, {f,4}, {integer,2}, {f,5}, {integer,1}, {f,6}]}}. beam_emu.c: OpCase(i_select_val_sfI): GetArg1(0, tmp_arg1); do_binary_search: 怪不得这么快。 |
|
返回顶楼 | |
发表时间:2009-09-14
mryufeng 写道 谁说dict的复杂度是N, 它的实现是个hash表, 它的复杂度是最后桶的seg的大小 + 常数。 ets用的是读写锁 如果是同一个调度器上的process,那么根据读写锁的futex实现 这个都在用户空间裁决,速度是飞快的,无什么太大的开销。 但是如果你有很多cpu 进程在不同的调度器上(不同的os线程) 那么涉及到内核裁决 速度就慢很多。 解释的太好了 |
|
返回顶楼 | |