说说一个新的è€æ¦‚念coroutine
å› ä¸ºæœ€è¿‘çš„å·¥ä½œå½“ä¸é¢‘ç¹åœ°ç”¨åˆ°äº†å¼‚æ¥çš„IO编程模型,对于异æ¥æ¨¡åž‹çš„难于维护性深感切肤之痛。工作之余便在考虑有没有什么方法å¯ä»¥ä½¿è¿™ç§æ¨¡åž‹å˜å¾—æ›´åŠ çš„æ˜“è¯»æ˜“å†™å’Œæ˜“ç»´æŠ¤ï¼Œæœ‰ä¸€ä¸ªæƒ³æ³•å¾ˆè‡ªç„¶çš„äº§ç”Ÿäº†ï¼Œå°±æ˜¯ç”¨æˆ‘ä»¬ç†Ÿæ‚‰çš„æµç¨‹åŒ–的方法æ¥åšå†™å¤„ç†æµç¨‹ï¼Œç„¶åŽåœ¨ä¸€äº›IO触å‘点上异æ¥åŒ–,也就是触å‘一个异æ¥IO请求,将当å‰çš„执行状æ€æ¢å‡ºï¼Œæ¢å…¥å¦ä¸€ä¸ªæ‰§è¡ŒçŠ¶æ€ï¼Œç›´åˆ°IO请求结æŸï¼Œè¯¥æ‰§è¡ŒçŠ¶æ€è¢«å†æ¬¡æ¢å…¥ï¼Œåˆ™ç»§ç»æ‰§è¡Œã€‚
åŽæ¥åŽ»æœç´¢ç›¸å…³çš„问题,å‘现其实这个是一个很è€çš„想法了。在计算机科å¦å½“ä¸ï¼Œè¿™ä¸ªæœ¯è¯å«åšCoroutine,最早æ出是在1969年,而在早期的高级è¯è¨€lispå’Œschema当ä¸å°±æœ‰å®žçŽ°ã€‚如果把Coroutine和函数进行比较的è¯ï¼Œå‡½æ•°åªæœ‰ä¸€ä¸ªå…¥å£ç‚¹ï¼Œè€ŒCoroutineå¯ä»¥æœ‰å¤šä¸ªå…¥å£ç‚¹ã€‚当Coroutine被第一次调用到的时候,它将从起始处开始执行,一旦é‡åˆ°å…·æœ‰yieldè¯ä¹‰çš„è¯å¥çš„时候,就是返回给å¦å¤–一个Coroutine或者调用者,而在接下æ¥è¢«è°ƒç”¨çš„时候,就从yieldè¯å¥ä¸‹é¢çš„一æ¡è¯å¥ç»§ç»æ‰§è¡Œç›´åˆ°é‡åˆ°æ–°çš„yieldè¯å¥æˆ–者Coroutine的结æŸã€‚
如果了解Python,其实Python当ä¸çš„Generator就是一ç§Coroutine。比如
def xrange(start, end):
   val = start;
   while ( val < start ):
      yield val
      val += 1
除了Python,Stackless-Pythonå’Œ.NET也有相应的实现,而C/C++虽然有一些实现,但是通用性都ä¸å¤ªå¥½ï¼Œå› 为实现难度相对比较大,毕竟Coroutineå®Œå…¨é¢ è¦†äº†C/C++基于stack的函数调用模型。
下é¢å¤§ä½“上看一下Coroutineçš„å‡ ä¸ªC实现,下次å†å†™ã€‚
Pythonä¸é”™çš„. 我边上的朋å‹æ‰“算用这个写个网站呢.居说效率也好..哈哈
ä½ çœ‹è¿‡Unix环境高级编程没?
fiber is the key at window platform