纤程
Widnows 是提供了用户级线程的,类似 coroutine 需要用户主动是切换。这在单线程程序中非常有用。线程调度模块只负责提供堆栈,环境的保存。不负责分配时间片等。
自己实现 coroutine 并不难,但能用操作系统提供的可以得到更多的便利。Windows 中把这种用户级线程叫做 Fiber,纤维的意思。比较通用的译名是纤程。
我们可以把一个 thread 转换成一个 fiber ,用到的 API 是 ConvertThreadToFiber。其实用的更多的是CreateFiber,它可以创建一个纤程,但并不切换过去运行。
被创建出来的 Fiber 会有一个上下文的地址被返回,用于以后的切换操作。我们可以用 SwitchToFiber 来切换。这是唯一用于 Fiber 释放操作权的途径。SwitchToFiber 必须显式的指定切换的目标,所以 Fiber 调度的工作需要我们自己写代码来实现。
GetCurrentFiber 和 GetFiberData 这两个函数都很有用,一个用来取到运行环境,一个用来取得创建参数,这两个函数都是用 inline 函数的形式提供在 .h 文件中的。
Comments
Posted by: suds | (17) June 21, 2012 02:30 PM
Posted by: Cloud | (16) April 8, 2009 08:54 PM
Posted by: xiaol | (15) April 8, 2009 09:40 AM
Posted by: chen | (14) November 13, 2008 04:09 PM
Posted by: yongzhi.wu | (13) October 18, 2007 10:23 AM
Posted by: Anonymous | (12) May 14, 2007 10:24 PM
Posted by: Cloud | (11) May 14, 2007 01:17 PM
Posted by: Anonymous | (10) May 14, 2007 09:39 AM
Posted by: Atry | (9) May 13, 2007 07:52 PM
Posted by: Anonymous | (8) May 12, 2007 09:43 PM
Posted by: Anonymous | (7) February 9, 2007 11:11 AM
Posted by: Fang Yidong | (6) July 25, 2006 04:30 PM
Posted by: Atry | (5) December 5, 2005 06:44 PM
Posted by: madlax | (4) November 15, 2005 10:35 PM
Posted by: lhb | (3) November 2, 2005 07:26 PM
Posted by: Cloud | (2) October 18, 2005 12:16 AM
Posted by: sandy | (1) October 17, 2005 05:58 PM