Javascript 什么是Meteor并发模型?

Javascript 什么是Meteor并发模型?,javascript,multithreading,concurrency,meteor,fibers,Javascript,Multithreading,Concurrency,Meteor,Fibers,我正在为Meteor应用程序编写服务器端逻辑,该应用程序必须更新内存状态以响应客户端的请求。这个应用程序需要强大的并发性保证——特别是,我希望确保一次只执行一个更新 我试图弄清楚Meteor的并发模型是否支持这一点。文档中提到Meteor是多线程的(这将是一个问题),但在四处搜索之后,我得到的印象是Meteor实际上使用了光纤(显式调度的线程)。如果这是真的,那么我是安全的,只要我的代码中需要以原子方式运行的部分不进行任何Meteor调用(这涉及IO并因此产生执行锁) 是这样吗?我在哪里可以找到

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

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


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

好吧,我查看了流星源,下面是工作原理:

1) 在服务器端,Meteor专门使用光纤来处理并发性。光纤与线程类似,只是必须显式地生成上下文。这使得并发性的推理变得更容易,但(潜在)代价是某些光纤会使其他光纤陷入饥饿

2) 对Meteor.call、Meteor.setInterval的所有调用以及任何收集操作都封装在光纤中。这意味着所有这些调用都会产生上下文

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

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

来自meteor文档:

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


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

我认为您应该自己在内存存储中实现锁,或者您可以使用mongo原子操作。如果有帮助,光纤库的文档是[here][1][1]:@Denis如果我可以实现内存锁,因为非IO、非屈服操作是原子的,那么我在这个应用程序中甚至不需要它们。无论如何,我想知道Meteor中的并发是如何工作的,以供将来参考。这些东西应该清楚地记录在某处;事实并非如此。我可能会浏览流星的源代码。