9

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

但是,我似乎无法掌握有关纤维的要领。我知道 Fiber 是一种协作多任务的方式,但据我发现,在实际情况下有关线程和 Fiber 之间相互作用的文档很少。

光纤有哪些实际用例?

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

4

2 回答 2

2

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

不。

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

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

根据它们的实现方式,当时的线程可以是从“基本相同”到“完全相同”的任何地方,我们今天称之为“绿色线程”或“纤维”。

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

于 2018-04-30T12:33:27.940 回答
2

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

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

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

于 2018-05-06T11:55:57.073 回答