Meteor Fiber是如何实现的,它们实际上不会阻塞节点的单线程吗?

问题描述 投票:0回答:1

我最近一直在处理 Meteor(某种遗留)代码。我知道后端代码会(类型明智)阻塞对 Mongo 的调用,但我被告知这些调用在光纤上工作。 据我所知,这些在光纤上运行的代码看起来与阻塞代码完全相同。 有人告诉我没关系,但我想知道这是如何实现的。 我有 Scala 背景,我知道 Fiber 需要某种暂停机制,允许计算等待,直到某个结果可用。 这在经典的阻塞代码中是不可能的。 (对于 Scala,平面映射将计算与回调分开)

换句话说... Meteor.bindEnvironment 是做什么的?

使用 async/await 或生成器/yield 可以实现这一点。但除此之外呢?如何?流星纤维如何工作? 在进行 HTTP 等 I/O 操作或使用文件系统时,如何避免阻塞唯一可用的线程?

meteor fibers
1个回答
3
投票

Meteor 是在回调地狱盛行的时代设计的,因此他们选择了 Fiber,通过同步代码使构建应用程序变得更加简单。 Meteor Fiber 实现基于 node-Fibers,从 Nodejs v16.0.0 开始不再支持,这就是 Meteor 尝试用 async/await 和 async hooks 替换 Fiber 的原因。

如果您想了解更多有关 Meteor 中纤维材料如何工作的信息,我推荐 Ben Newman talkslides。还有这个答案

© www.soinside.com 2019 - 2024. All rights reserved.