我对窗户中的纤维有一些疑问

I have some question about fiber in windows

本文关键字:窗户      更新时间:2023-10-16

我想知道窗口提供的光纤。

假设我创建了 4 根光纤。

------------线-----------------

纤维1 - 纤维2 - 纤维

3 - 纤维4

^

纤程 1 现在线程执行。

    一根
  1. 线只能同时运行一根光纤。对吗?

  2. 如果一根线终止了纤维
  3. 1,那么另一根线的所有纤维也都终止了?

  4. 我知道光纤是非先发制人的。那么如果我想将光纤 1 切换到光纤 2,除了在光纤 1 中调用 SwitchToFiber 之外别无他法?

  5. 如果我在执行某个任务期间调用 fiber1 中的 SwitchToFiber,那么 fiber1 会立即休眠?还是在完成任务后睡觉?

  6. 光纤 1 到 光纤 4 中没有共享空间?

  7. 而且没有共享空间,那么就没有必要锁定光纤。 对吗?

我阅读了 MSDN 文档,但我无法理解某些内容。所以我在这里问。

SwitchToFiber就像longjmp,而CreateFiber就像setjmp的扩展版本,分配额外的堆栈空间。 DeleteFiber就像setjmp分配的上下文块的free。最重要的是,给予者自己什么都不做,longjmp就像 C goto的扩展版本,例如类似于 gcc 的"计算 goto"扩展,除了它可以在跳跃时切换堆栈。您可以轻松地模拟光纤(非便携式)与setjmplongjmp和一些alloca