该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-06-11
Erlang因为是函数式编程语言,基本上变量们的值是不变的(只允许绑定一次),这样一来Erlang的share nothing的轻量级进程实际上是除可变数据外share EVERYTHING(包括code);
相较Ruby/Rails的share nothing,Ruby/Rails真的是share NOTHING,也就是说如果多核CPU下采用每个CPU起一个Rails实例的方法,每个实例就要重新装载、编译一套代码,内存消耗会大得多。 我的看法是如果想用每个核一个Rails实例的方法来简单解决Rails今后在多核CPU下的并行问题是有问题的。 至于Erlang,自OTP-11B加入SMP支持后,多核、单核你都不用自己操心,一切在OTP后台处理好了,而且,很简单就处理好了。 |
|
返回顶楼 | |
发表时间:2007-07-21
erlang的IO效率是非常高的 是一个用到了epoll writev readv 还有连delay send都考虑了的系统。消息的派遣都用了async thread pool,smp的支持贯穿整个emulator的实现,试问几个C++框架作了 就我所知道没有。文件IO的读写 erlang库里面都专门开了一个process来作. 还要一个选项 +c: Disable compensation for sudden changes of system time 对于一个时间驱动的网络程序 系统时间的突然改变对程序的冲击就不形容了。 做这么细的系统,也只有产品级的系统才拥有的。
|
|
返回顶楼 | |
发表时间:2007-07-27
[quote="Trustno1"]可以通过windows下的fiber或者linux下的ptx_switch_context来做coroutine. [/quote] 这个ptx_switch_context哪里有资料?完全搜不到呢,搜到的结果都指向这个帖子。。 |
|
返回顶楼 | |
发表时间:2007-07-27
Sorry API 记错了应该是ucontext.h下面的makecontext, swapcontext.等几个函数.
|
|
返回顶楼 | |
发表时间:2007-07-27
[quote="Trustno1"]Sorry API 记错了应该是ucontext.h下面的makecontext, swapcontext.等几个函数. [/quote]
多谢! 你总是能成为别人的指路明灯 ucontext / fiber / callcc / yield(python) 和erlang的进程调度是不是应该算是轻量级(用户级)线程了? 能不能再解释下continuation / coroutine / subroutine 是否描述的是同一个东西?这些词很是绕人呢。。 |
|
返回顶楼 | |
发表时间:2007-07-27
qiezi 写道: [quote="Trustno1"]Sorry API 记错了应该是ucontext.h下面的makecontext, swapcontext.等几个函数. [/quote]
多谢! 你总是能成为别人的指路明灯 ucontext / fiber / callcc / yield(python) 和erlang的进程调度是不是应该算是轻量级(用户级)线程了? 能不能再解释下continuation / coroutine / subroutine 是否描述的是同一个东西?这些词很是绕人呢。。 同绕。
|
|
返回顶楼 | |
发表时间:2007-07-27
continuation,实则上是一种函数调用方式或者说代码风格
g(result) { } f(....,g) { ..... result=.....; g(result); } 这是一个最简单的continuation style. call/cc只是实现continuation style的一种语法糖. ucontext / fiber / callcc / yield(python) 都是可以用于实现coroutine的某种技术. erlang和coroutine是不同的,coroutine是由代码决定何时进行调度.erlang的process则由erlang scheduler来实现分时调度. subroutine 实则上就是function,只是一个不返回result的函数,在pascal中叫做procedure. |
|
返回顶楼 | |