难道scala的actor仅仅是continuation的效果吗?
ngutom
2009-12-01
这样的并发对短连接的确很有效,
但对长连接作用有限吧。 哪位大拿来说说? Erlang又是什么机制了? |
|
night_stalker
2009-12-01
发射后不用管机制 …… 长连接更有优势:你可以新建 1000 个 actor,actor pool 自然会调度它们,如果活动量少,可能只用3、4个线程就搞定了。起 1000 个线程还不挂了?
手动管理线程如果资源利用到了极限自然比 actor 机制快,但是代码就很长很难看了(尤其是代码量越来越大时,简直就是个迷宫),不如让机器管理,代码清爽且杜绝诡异的暗藏 bug,尤其在这个机器越来越聪明,人越来越笨的时代,机器优化出来的东西经常会比人做的快 …… 另外 immutable 的代码风格,比起使用共享变量的代码风格更安全。 |
|
Arbow
2009-12-01
如果用react方式,加上NIO就可以少数几个actor pool线程处理1000+ Actor了,参考naggati项目。
Erlang那种微进程彪悍很多的,类似协程一样,结合底层的事件派发可以做到在一个线程内处理百万级别Processes调度 p.s scala2.8的continuation插件似乎改善了大量不必要的阻塞调用,跟NIO结合后有好的效率,有哪个高人可以说下 |
|
ngutom
2009-12-01
night_stalker 写道 发射后不用管机制 …… 长连接更有优势:你可以新建 1000 个 actor,actor pool 自然会调度它们,如果活动量少,可能只用3、4个线程就搞定了。起 1000 个线程还不挂了?
手动管理线程如果资源利用到了极限自然比 actor 机制快,但是代码就很长很难看了(尤其是代码量越来越大时,简直就是个迷宫),不如让机器管理,代码清爽且杜绝诡异的暗藏 bug,尤其在这个机器越来越聪明,人越来越笨的时代,机器优化出来的东西经常会比人做的快 …… 另外 immutable 的代码风格,比起使用共享变量的代码风格更安全。 我就是想知道长连接的情况下,怎么调度actor? |
|
ngutom
2009-12-02
如果只是在react结束的时候调度,对长链接就没有意义。
|
|
Arbow
2009-12-02
长连接是保持在网络层的,每个可读事件都可以使用react处理,没有矛盾
|
|
ngutom
2009-12-02
我才知道actor的调度在回调函数结束,或者等待时都会发生。
但没有强占式的,这应该是和Erlang actor的主要区别之一。 |
|
ngutom
2009-12-02
看了这个比较,觉得Scala actor和Erlang actor差距还是不小。
http://www.planeterlang.org/en/planet/article/Erlang_vs._Scala 看2.8的样子,应该能改善不少,可惜难产中。 决定开始用Scala做点东西,不然永远雾里看花。 |
|
ngutom
2009-12-06
night_stalker 写道 发射后不用管机制 …… 长连接更有优势:你可以新建 1000 个 actor,actor pool 自然会调度它们,如果活动量少,可能只用3、4个线程就搞定了。起 1000 个线程还不挂了?
那为什么Erlang被认为不适合长连接了? |
|
Arbow
2009-12-06
ngutom 写道 night_stalker 写道 发射后不用管机制 …… 长连接更有优势:你可以新建 1000 个 actor,actor pool 自然会调度它们,如果活动量少,可能只用3、4个线程就搞定了。起 1000 个线程还不挂了?
那为什么Erlang被认为不适合长连接了? 没这回事把,Erlang是常用于大量并发长连接的场合,比如ejabberd |