浏览 2470 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-02-18
最后修改:2009-02-18
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. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-02-19
不明白 他们为什么叫这个设计为TRAP
|
|
返回顶楼 | |
发表时间:2009-02-19
面对成千上万的Process,保持其机会均等看来是一个非常不错的决定。
|
|
返回顶楼 | |
发表时间:2009-02-19
bif,process和port都是遵循这个原则的, 这个公平太重要了!
|
|
返回顶楼 | |