进程、线程、纤程

本文探讨了进程、线程和纤程的概念及其区别。进程作为线程的容器,线程则是CPU调度的基本单位;纤程由用户级代码实现,采用非抢占式调度。通过示例代码展示了纤程在Windows环境下的创建与调度过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程是不活泼的。进程从来不执行任何东西,它只是线程的容器。线程总
是在某个进程环境中创建的,而且它的整个寿命期都在该进程中。单个进程可能包含若干个线程,所
有这些线程都“同时”执行进程地址空间中的代码。
线程是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; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值