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


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

你可能感兴趣的:(thread,编程,PHP,python,D语言)