Generator

几种并发编程模型开销(从大到小):

Process > Thread > Coroutine > Generator == Callback

从对机器的并行利用来说,却是完全相反的。

Process可以部署在不同机器上;
Thread需要在Process里面,往往是很多Thread在一个Process里面,它对多CPU利用还是比较充分的;
Coroutine在Thread里面运行,要利用多CPU,需要实现调度器;
Generator算是一种带有状态的Callback,或者是对象化的Callback,它们也需要运行在Thread里面,要利用多CPU,需要实现调度器;

为什么Generator比Coroutine要轻量一些?原因在于Coroutine是通过切换执行代码来完成的,每次切换需要保存所有寄存器再加载另一个Coroutine里面保存的寄存器状态。Generator和Callback一样,不需要这一步。

Python示例:

def foo():
for i in range(5):
yield i

for i in foo():
print i


假想的D代码:

generator!(int) foo() {
foreach(i; 0..5)
yield(i);
}

foreach(i; foo())
writefln(i);


D如何来实现?必须要在语言中实现,让它自动把栈上变量在堆上分配,就像Closure一样。

手工模拟也是可以的,比较逻嗦,和用Class模拟Closure是一样的。


新闻组里有个提案,可惜还没有实现啊:
[url]http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=41886[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值