论坛首页 综合技术论坛

Concurrency Programming 相關報告

浏览 34992 次
该帖已经被评为良好帖
作者 正文
   发表时间: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后台处理好了,而且,很简单就处理好了。
0 请登录后投票
   发表时间: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 对于一个时间驱动的网络程序 系统时间的突然改变对程序的冲击就不形容了。 做这么细的系统,也只有产品级的系统才拥有的。
0 请登录后投票
   发表时间:2007-07-27  

[quote="Trustno1"]可以通过windows下的fiber或者linux下的ptx_switch_context来做coroutine. [/quote]

这个ptx_switch_context哪里有资料?完全搜不到呢,搜到的结果都指向这个帖子。。

0 请登录后投票
   发表时间:2007-07-27  
Sorry API 记错了应该是ucontext.h下面的makecontext, swapcontext.等几个函数.
0 请登录后投票
   发表时间:2007-07-27  
[quote="Trustno1"]Sorry API 记错了应该是ucontext.h下面的makecontext, swapcontext.等几个函数. [/quote]

多谢!  你总是能成为别人的指路明灯

ucontext / fiber / callcc / yield(python) 和erlang的进程调度是不是应该算是轻量级(用户级)线程了?
能不能再解释下continuation / coroutine / subroutine 是否描述的是同一个东西?这些词很是绕人呢。。
0 请登录后投票
   发表时间:2007-07-27  

qiezi 写道:
[quote="Trustno1"]Sorry API 记错了应该是ucontext.h下面的makecontext, swapcontext.等几个函数. [/quote]

多谢!  你总是能成为别人的指路明灯

ucontext / fiber / callcc / yield(python) 和erlang的进程调度是不是应该算是轻量级(用户级)线程了?
能不能再解释下continuation / coroutine / subroutine 是否描述的是同一个东西?这些词很是绕人呢。。
同绕。




0 请登录后投票
   发表时间: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.
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics