Re: 答复: Re:_[cpp]请教关于coroutine的问题

李慧霸 magazine.lihuiba at 163.com
Fri Jul 7 09:40:26 CST 2006


啊,例子在哪儿?

------------------				 
李慧霸
2006-07-07

-------------------------------------------------------------
发件人:SpitFire
发送日期:2006-07-06 10:32:29
收件人:'C++ Discuss Group'
抄送:
主题:答复: Re:_[cpp]请教关于coroutine的问题


这里有一个例子,使用C实现,希望有帮助 


SpitFire

spitfire2 at gmail.com 
-----邮件原件-----
发件人: cpp-bounces at codingnow.com [mailto:cpp-bounces at codingnow.com] 代表 李
慧霸
发送时间: 2006年7月6日 9:18
收件人: C++ Discuss Group
主题: Re: Re:_[cpp]请教关于coroutine的问题

应该不需要建立自己的os,也不需要虚拟机。我自己曾经实验过,在windows上,直接
把堆栈指针切换掉就可以,只是自己的实现很不完善,更改一些编译开关就不能用了,
更不用说移植。

我发现coroutine这东西在网络应用里面很管用,尤其是当程序需要管理大量并发连接
的时候,所以想找一个健壮、高效的实现,能移植最好了。那个ucos我一定去看看。

------------------				 
李慧霸
2006-07-06

-------------------------------------------------------------
发件人:kasicass
发送日期:2006-07-06 00:56:10
收件人:cpp
抄送:
主题:Re:_[cpp]请教关于coroutine的问题

 
定义
 
#define STK_UNIT   int
 
struct tcb
{
   STK_UNIT *   pstk;
   ...
};
 
 
pstk指向当前thread/routine的stack。从A切换到B,则将CPU环境pushal到pstk中,然
后换到B的pstk,恢复即可。
 
参见uC/OS-II TCB以及task切换的设计,其是multi-tasking的,将起转换为coroutine
即可。
 
切换的启动过程可以通过自己设定的 software interrupt ...
 
 
方法的缺点:
好象需要自己建立OS,不能在Linux/Windows上直接建立这些机制 ...
or 自己写个虚拟机 ... 然后在上面再构建 coroutine -_-! ... 
 
 



-----原始邮件-----
发件人:"李慧霸" 
发送时间:2006-07-05 20:28:46
收件人:"cpp" 
抄送:(无)
主题:[cpp]请教关于coroutine的问题


我找了一些coroutine的跨平台实现(源代码),发现里面基本上都用了memcpy来保
存、恢复堆栈。这样做可能回造成比较低的效率,有没有哪个是用切换堆栈指针实现
的?windows的fiber是怎么做的?


--------
李慧霸
2006-07-05

_______________________________________________
Cpp mailing list
Cpp at codingnow.com
http://codingnow.com/mailman/listinfo/cpp
_______________________________________________
Cpp mailing list
Cpp at codingnow.com
http://codingnow.com/mailman/listinfo/cpp

_______________________________________________
Cpp mailing list
Cpp at codingnow.com
http://codingnow.com/mailman/listinfo/cpp

_______________________________________________
Cpp mailing list
Cpp at codingnow.com
http://codingnow.com/mailman/listinfo/cpp




More information about the Cpp mailing list