纤程与协程的区别

2023年 11月 17日 88.8k 0

纤程(Fiber)是 Windows 操作系统提供的概念。那什么是纤程呢?

纤程是一种比线程更轻量级的执行单元,它可以在一个线程中切换执行,不需要操作系统内核的干预。纤程可以用来实现异步任务,避免了创建新线程的开销。纤程也叫做协程(coroutine),是一种用户态的多任务机制。

协程与纤程主要的区别点:

  • 纤程是操作系统级别的实现,而协程是语言级别的实现。纤程被操作系统内核控制,协程对于内核而言不可见。
  • 纤程和线程类似,都拥有自己的栈、寄存器现场等资源,但是纤程更轻量级,一个线程可以包含多个纤程。协程也可以有自己的栈(stackful)或者共享栈(stackless),但是寄存器现场由用户代码保存和恢复。
  • 纤程之间的切换由用户控制,需要显式地调用转换函数。协程之间的切换也由用户控制,但是可以通过生成器、异步函数等语法糖来隐式地实现。
  • 纤程只出现在 Windows 上,而协程在很多语言和平台上都有支持。

一个简单的纤程程序,创建两个纤程并在它们之间切换:

#include "pch.h"
#include
#include
#include

#define FIBER_COUNT 2

LPVOID g_lpFiber[FIBER_COUNT] = {};

VOID WINAPI FiberFun(LPVOID pParam) //纤程函数的返回类型为VOID,并不是因为返回值没有意义,而是因为这个函数不应该返回!
{
int nFiberIndex = (int)pParam;
while (true)
{
std::cout

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论