论坛首页 综合技术论坛

答erlang静态数据查询方式

浏览 5138 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-09-05  
多谢指点

这么说在多核的cpu上,常量字典的表现应该优于ets
回头我尝试下
0 请登录后投票
   发表时间: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:

怪不得这么快。

0 请登录后投票
   发表时间:2009-09-14  
mryufeng 写道
谁说dict的复杂度是N, 它的实现是个hash表, 它的复杂度是最后桶的seg的大小 + 常数。

ets用的是读写锁 如果是同一个调度器上的process,那么根据读写锁的futex实现 这个都在用户空间裁决,速度是飞快的,无什么太大的开销。 但是如果你有很多cpu 进程在不同的调度器上(不同的os线程) 那么涉及到内核裁决 速度就慢很多。


解释的太好了
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics