`
qiezi
  • 浏览: 491500 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Generator

    博客分类:
  • D
阅读更多
几种并发编程模型开销(从大到小):

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是一样的。


新闻组里有个提案,可惜还没有实现啊:
http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=41886
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics