[新闻] 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)


感觉是编译器问题。。
Global site tag (gtag.js) - Google Analytics