0x0 基础知识
00 原理
纤程 (Fiber)是一种最轻量化的线程(lightweight threads)。它是一种用户线程(user thread),让应用程序可以独立决定自己的线程要如何运作。操作系统内核不能看见它,也不会为它进行调度。- 就像一般的线程,纤程有自己的寻址空间。但是纤程采取合作式多任务(Cooperative multitasking),而线程采取先占式多任务(Pre-emptive multitasking)。
- 应用程序可以在一个线程环境中创建多个纤程,然后手动运行它。纤程不会被自动运行,必须要由应用程序自已指定让它运行,或换到下一个纤程。
比较 | 线程(Thread) | 纤程(Fiber) |
实现方式 | 是个内核对象 | 在用户模式中实现的一种轻量级的线程,是比线程更小的调度单位。 |
调度方式 | 由Microsoft定义的算法来调度,操作系统对线程了如指掌。内核对线程的调度是抢占式的。 | 由我们自己调用SwitchToFiber来调度,内核对纤程一无所知。线程一次只能执行一个纤程代码,纤程间的调度不是抢占式的。 |
备注 | ①一个线程可以包含一个或多个纤程。操作系统随时可能夺走纤程所在线程的运行。当线程被调度时,当前被选择的纤程得以运行,而其他纤程无法运行,因为同一个线程中,每次只能有一个纤程正在运行,除非调用SwitchToFiber才能切换到另一个纤程去执行。与SwitchToThread不同,SwitchToFiber会立即切换到另一个纤程去执行(如果该线程的CPU时间还有剩余的话),而SwitchToThread要等CPU来调度另一个线程。②纤程与线程一样,也有自己的寄存器环境与函数调用栈。 |
01 文档
convertThreadToFiber 函数 (winbase.h) – Win32 apps | Microsoft Learn
createFiber 函数 (winbase.h) – Win32 apps | Microsoft Learn
switchToFiber 函数 (winbase.h) – Win32 apps | Microsoft Learn
deleteFiber 函数 (winbase.h) – Win32 apps | Microsoft Learn
0x1 实现代码
© 版权声明
THE END
暂无评论内容