什么是Meteor并发模型?

时间:2013-08-11 09:16:02

标签: javascript multithreading concurrency meteor fibers

我正在为Meteor应用程序编写服务器端逻辑,该应用程序必须更新内存状态以响应客户端的请求。此应用程序需要强大的并发保证 - 特别是,我希望确保一次只执行一次更新。

我试图弄清楚Meteor的并发模型是否支持这一点。文档提到Meteor是多线程的(这将是一个问题),但在搜索之后,我得到Meteor实际上使用光纤(显式调度的线程)的印象。如果这是真的,那么只要我的代码中需要以原子方式运行的部分不会进行任何Meteor调用(涉及IO并因此产生执行锁定),我就是安全的。

是这样的吗?我在哪里可以找到有关Meteor的并发模型的更多信息?

2 个答案:

答案 0 :(得分:12)

好吧,我浏览了Meteor来源,以及这里的工作方式:

1)在服务器端,Meteor专门使用光纤来处理并发。纤维就像线程,除了必须明确地产生上下文。这使得并发性的推理更加容易,因为某些光纤使其他光纤匮乏(潜在)成本。

2)对Meteor.call,Meteor.setInterval和任何Collection操作的所有调用都包含在光纤中。这意味着所有这些调用都会产生上下文。

3)此外,任何纤维/期货模块的使用都会产生。

这种结构的结果是,如果你想编写原子操作,只需避免在你想要原子化的代码块中访问Meteor框架提供的对象。如果这个块确实需要(比方说)数据库访问,那么你可以毫无困难地实现内存中锁,但对于我的应用程序,这种知识就足够了。我需要使用Mongo已经阅读的所有文档来调用我的核心更新函数。

答案 1 :(得分:2)

来自流星文档:

  

在Meteor中,您的服务器代码在每个请求的单个线程中运行,而不是   在Node的典型异步回调样式中。我们发现线性   执行模型更适合Meteor中的典型服务器代码   应用

http://docs.meteor.com/#structuringyourapp

有人知道这个的性能影响吗?