[新闻] dactor项目
qiezi
2009-05-14
可以提交到newsgroup,这部分代码好像是tango中抽出来的
|
|
dogstar
2009-05-15
恩,fiber本身就是轻量级的.创建,销毁,切换代价都不大.
|
|
Sam1860
2009-05-15
引用 能不能给coroutine也加个池什么的,spawn时从Coroutine Pool 中提取一个空闲的协程来调度,调度结束后再reset一下放回到池里,这样效率不就更高了吗? 上次你给我的多线程调度Fiber的例子,我改了一下使用dmd2.0.29编译在ubuntu上测试,不知道怎麽回事,调度一段时间后,有时会出现 “segmentation fault”,好像是在线程切换时发生的,不知道为什么在windows下确没事儿,请教了!! 我的机器是1个G内存。启动了30000个纤程,再多一些好像就不行了。 我用archlinux + dmd2.0.30跑300000个都可以 ,只是很慢 我的内存只有2G |
|
davesun
2009-05-15
看来ubuntu占的内存比较大
__gshared是干什么用的? private __gshared SyncQueue!(Fiber) runQueue; 加了__gshared以后 segfault 不会再出现了!用的dmd2.030 |
|
hurd
2009-05-15
__gshared是C类型的全局变量,不加__gshared或者Shared是就是TLS变量。
|
|
hurd
2009-05-15
加上-vtls就会提示所有的tls变量。
|
|
qiezi
2009-05-15
davesun 写道 看来ubuntu占的内存比较大
__gshared是干什么用的? private __gshared SyncQueue!(Fiber) runQueue; 加了__gshared以后 segfault 不会再出现了!用的dmd2.030 原来是这个原因〜 |
|
qiezi
2009-05-15
我测试了一下,加上__gshared还是会segfault
|
|
hurd
2009-05-15
似乎这里也没tls变量。
|
|
hurd
2009-05-15
class X{ int i; void add(){ i++; } } void main() { auto t = new shared(X); t.add; } 或者 shared class X{ int i; void add(){ i++; } } void main() { auto t = new X) t.add; } 都编译通不过,提示 d2.d(13): Error: function d2.X.add () does not match parameter types () d2.d(13): Error: t.add can only be called on a mutable object, not shared(X) 和 d2.d(13): Error: t.add can only be called on a mutable object, not shared(X) 感觉是编译器问题。。 |