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

Erlang ERTS的Trap机制的设计及其用途

阅读更多
erlang的trap机制在实现中用的很多,在费时的BIF操作中基本上都可以看到。它的实现需要erl vm的配合。它的作用基本上有3个:

1. 把费时操作分阶段做。由于erlang是个软实时系统,一个进程或者bif不能无限制的占用cpu时间。所以erlang的每个进程执行的时候,最多只能执行一定数量的指令.这个是设计方面的目标。实现上也要配套。所以比如md5,list_member查找这种可能耗时的操作都是用trap机制来实现的,也就是说 当进程调度到的时候 执行一定数量的计算 然后把上下文trap起来 放弃执行 等待下一次的调度 来继续计算。

2. 延迟执行,实现上层的决策。 明显的例子是 send操作。 send的时候 节点间可能未连接,所以这个send的操作不能继续,先trap, 然后在下一次的调度的时候 执行节点连接操作,一旦成功 send操作就继续往下执行。对客户来讲这个操作是透明的。他不知道你幕后的这些事情。

3. 主动放弃CPU yield.

erlang设计还是蛮细致的!

PS:涉及到费时操作的BIF有:
do_bif_utf8_to_list
ets_delete_1
spawn_3
monitor_2
spawn_link_3
spawn_opt_1
send_2
crc32_1
adler32_1
md5_1
send_3
build_utf8_return
build_list_return
finalize_list_to_list
do_bif_utf8_to_list
ets_select_reverse
ets_match_spec_run_r_3
re_run_3
re_exec_trap
keyfind
monitor_node_3.



分享到:
评论
3 楼 mryufeng 2009-02-19  
bif,process和port都是遵循这个原则的, 这个公平太重要了!
2 楼 litaocheng 2009-02-19  
面对成千上万的Process,保持其机会均等看来是一个非常不错的决定。
1 楼 mryufeng 2009-02-19  
不明白 他们为什么叫这个设计为TRAP

相关推荐

Global site tag (gtag.js) - Google Analytics