Erlang R15最大的卖点Native Process



转载自Erlang非业余研究
本文链接地址: Erlang R15最大的卖点Native Process
R15最激动人心的东西就是这个Native Process,请参看Rickard Green写的Future Extensions to the Native Interface:看这里
我来blabla下。 做过Erlang规模程序的人都知道有个痛, Erlang的公平调度引起的痛。 举个例子,比如说日志服务。当我们的系统有成千上万的进程需要日志服务的时候,我们通常会把日志的内容发给一个日志进程由它来负责持久化。这是个典型的模块划分方法,我们之前的c程序也都是这么干的。但是在erlang下这样很容易有问题。大家知道Erlang讲究公平,进程调度是公平的,port调度是公平的,bif使用是公平的,甚至ets这样的模块使用也是公平的。那么我们就可以这么理解。如果一个系统里面有N个进程需要服务,那么总进程数目是N+1, 平均来分配时间片。反过来说就是这个日志进程只能分的整个系统的1/(N+1)的cpu计算能力,但是要干N个活。后果就是这个进程忙不过来,导致消息队列不停的加大,消息队列需要堆内存,这个内存需求越来越大,最后系统分配不出内存,最终vm挂掉了。

这个典型的设计问题是几乎每个刚做erlang程序的人都会碰到的。 那我们如何来解决呢?一个解决方案就是加大日志服务进程的数目,来多分点CPU。还有一个方案就是绕过公平调度的原则。 Erlang的每个进程执行的时候是分配一定的时间片,每执行一个函数就消耗一个时间片,当时间片消耗完毕的时候,进程就被抢占调度。那么知道了这个工作原理,我们就可以耍赖来在函数执行的时候不减掉时间片,这样这个进程就可以无限制的执行。这也是我过去绕开这个问题的解决方案,缺点是你需要对vm很熟悉,并且知道如何改。
这时候Native Process来救助了。我们知道目前的版本是支持nif的,也即是说用户可以自己写函数来处理逻辑。但是nif有限制的,它只是被动的被调度器来执行,主控是由调度器来完成的。如果调度器在合适的事件上把相应的钩给我们,那我们就有可能能够影响调度器的运作。
Native Process就是这个思路。
Native Process进程本身是个和原来兼容的进程,不影响系统原理的语义。在hook后自己进入自己的事件循环,来独立处理IO时间或者执行计算,在必要的时候再变成原来的进程。
通过暴露更多的钩给nif, 用户可以自己定义自己的事件处理逻辑来干预调度器的行为。比如说在调度器切出一个进程的时候,允许用户对进程的时间片计数器修改,这样就可以绕过PREEMPTABLE NIF and Driver。由于Erlang是进程间完全隔离的,那我们也可以绕过这个限制,可以直接修改进程的数据,达到在VM里面共享状态的目的。hook使得这些事情都变得可能。
具体如何使用请参考ppt。
我们来总结下,它的适用场景是:
Optimizing
Access functionality not available in Erlang
Operating System services
Third party libraries
他能够解决下面的问题:
Native processes make drivers obsolete
Will be able to handle any protocol
Possible to minimize the need for native code
Will have access to the same functionality as ordinary processes
More efficient
Distribution transparent
Share implementations
期待 otp团队给力!
祝玩得开心!
Post Footer automatically generated bywp-posturl pluginfor wordpress.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值