光纤用例

Fibers use cases

本文关键字:光纤      更新时间:2023-10-16

我正在阅读很多关于纤维,或绿色线,或我们可以给用户空间线的任何其他名称。我开始阅读文档和教程(这些是C++链接,但我不需要特定的语言(:

  • 区分协程和纤程
  • 使用增强纤维的生产者/消费者
  • Boost.Fiber文档
  • 很多
  • 很多其他的

然而,我似乎无法掌握纤维的本质。我知道纤维是一种协作多任务处理的方式,但据我所知,关于实际案例中线和纤维之间相互作用的文档很少。

纤维有哪些实际用例

例如,每个文档实际上都使用异步 I/O 作为示例,但是如果我没有 I/O 绑定问题怎么办?例如,如果我的问题是计算大文件中的单词怎么办?在这里,我只是在线程之间拆分文件,光纤可以以某种方式提供帮助吗?我想 CPU 密集型计算(例如矩阵/向量运算(等数值问题不适合光纤,但同样,我可能完全错了。

如果我的问题是计算大文件中的单词怎么办?...,纤维可以以某种方式提供帮助吗?

不。

每个文档实际上都使用异步I/O作为示例

异步 I/O 是线程最初打算在多 CPU 系统尚未逃离实验室时解决的问题。 线程是构建程序的另一种方式,该程序必须等待来自多个不同的非同步源的输入,并且必须及时响应这些输入。

根据它们的实现方式,当时的线可以在任何地方,从"大致相同"到"完全相同",我们今天称之为"绿色线"或"纤维"。

当多CPU系统进入市场时,线程被视为利用并行处理功能的自然而明显的方式。

与操作系统线程相比,光纤在创建和上下文切换方面的开销更低。因此,从理论上讲,如果您有一个解决方案,其中锁上有很多阻塞,您可能会看到光纤的性能改进,因为运行光纤的操作系统线程将使用更多分配的运行时。这是因为当光纤阻塞光纤互斥锁/锁时,底层操作系统线程将调用光纤调度程序,该调度程序将运行不同的光纤,所有这些都无需执行操作系统线程上下文切换。这是 M:N 线程模型背后的基本思想。

另一种情况是,如果您需要以高频率或大量创建和销毁线程。由于光纤的创建速度更快,并且通常比操作系统线程更轻量级,因此您可以大量使用它们,并获得更细粒度的并行性(理论上(。

一个实际应用是使用Actor模型进行基于大型代理的模拟。使用光纤,每个代理/参与者都可以在自己的光纤上运行。