function demo(key, value) { var fiber = Fiber.current; client.set(key, value, function(err, reply){ fiber.run(); }); Fiber.yield(); }
这里首先用Fiber函数来建立一个需要在同步作用域中执行的函数,接着在需要异步执行的地方(client.set())之前,首先var fiber = Fiber.current;用于获取当前的执行域,然后挂起回调,
接着是:Fiber.yield();,这句话的作用可以理解为阻塞当前的执行域,并释放cpu,这样就为刚刚挂起的回调提供了cpu了,
当回调执行完后fiber.run();用于使yield返回.
运行轨迹:
----Fiber.current
----client.set()----
----等待回调,继续往下只Fiber.yield(),阻塞纤程
----回调完成 fiber.run();
----执行Fiber.yield()后被阻塞的部分
协程实现的基础:http://tech.uc.cn/?p=1055
协程的定义与分类:http://ravenw.com/blog/2011/08/24/coroutine-part-1-defination-and-classification-of-coroutine/