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

Erlang使用心得(二)

阅读更多
(1)关于gen_server的同步、异步消息处理的并发问题,即gen_server在处理handle_call的时候来了一个handle_info,会怎么处理?答案是无论同步异步,都是按照来的顺序one by one处理。

参考帖子:
http://youdao.fqdaili.com/baidu.com.php?u=9414a3d8bcb2ffaOi8vZXJsYW5nLjIwODY3OTMubjQubmFiYmxlLmNvbS9nZW4tc2VydmVyLWhhbmRsZS1pbmZvLXZzLWhhbmRsZS1jYWxsLXRkMjI0OTU3NS5odG1s&b=15

(2)关于process的调度(转)
引用
首先明确一点,Erlang的process的调度是抢占式的,而非couroutine的协作式的。其次,Erlang早期版本是只有一个调度器,运行在一个线程上,随着erts的发展,现在erlang的调度器已经支持smp,每个cpu关联一个调度器,并且可以明确指定哪个调度器绑定到哪个cpu上。第三,Erlang的调度也是采用优先队列+时间片轮询的方式,每个调度器关联一个ErtsRunQueue,ErtsRunQueue内部又分为三个ErtsRunPrioQueue队列,分别对应high,max和normal,low的优先级,其中normal和low共用一个队列;在Erlang中时间片是以reduction为单位,你可以将reduction理解成一次函数调用,每个被调度的process能执行的reduction次数是有限的。调度器每次都是从max队列开始寻找等待调度的process并执行,当前调度的队列如果为空或者执行的reductions超过限制,那么就降低优先级,调度下一个队列。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics