进程是不活泼的。进程从来不执行任何东西,它只是线程的容器。线程总
是在某个进程环境中创建的,而且它的整个寿命期都在该进程中。单个进程可能包含若干个线程,所
有这些线程都“同时”执行进程地址空间中的代码。
线程是cpu分配的基本单位。
纤程是以用户方式代码来实现的,内核并不知
道纤程,并且它们是根据用户定义的算法来调度的。由于你定义了纤程的调度算法,因此,就
内核而言,纤程采用非抢占式调度方式。
需要了解的下一个问题是,单线程可以包含一个或多个纤程。就内核而言,线程是抢占调
度的,是正在执行的代码。然而,线程每次执行一个纤程的代码—你决定究竟执行哪个纤程
#include <windows.h> #undef MESSAGEBOX #define MESSAGEBOX(s) MessageBoxA(NULL,s, "Fiber demo ",MB_OK) void *fiber[4]; void fiber0(void *) { while (1) { for (int i=1;i <4;i++) SwitchToFiber(fiber[i]); } } void CALLBACK fiber1(void *) { while(1) { MESSAGEBOX( "Fiber 1 "); SwitchToFiber(fiber[0]); } } void CALLBACK fiber2(void *) { while(1) { MESSAGEBOX( "Fiber 2 "); SwitchToFiber(fiber[0]); } } void CALLBACK fiber3(void *) { while(1) { MESSAGEBOX( "Fiber 3 "); SwitchToFiber(fiber[0]); } } int main() { fiber[0] = ConvertThreadToFiber(NULL); fiber[1] = CreateFiber(0,fiber1,NULL); fiber[2] = CreateFiber(0,fiber2,NULL); fiber[3] = CreateFiber(0,fiber3,NULL); fiber0(NULL); return 0; }