nodejs中的并发模型

有没有人知道内存和线程模型是在nodejs?

特别是ii++primefaces? 它是否像在Java 1.5,Java 1.4,C中一样volatile ?还是根本就不行?

了解节点和V8如何交互很有用。 节点处理等待来自操作系统的I / O或定时器。 当节点从I / O或定时器唤醒时,通常会调用一些JavaScriptcallback函数。 当节点运行这些callback时,控制传递到V8,直到V8返回节点。

所以,如果你做var ii = 1; ii++; var ii = 1; ii++; ,你将永远不会发现ii是除了2以外的任何东西。所有的JavaScript运行直到完成,然后控制传递回节点。 如果你doSomething(); doSomething(); doSomething(); doSomething(); 那将总是运行doSomething两次,直到doSomething的第二次调用返回,它才会返回到节点的事件循环。 这意味着你可以像这样完全locking节点:

 for (var i=0 ; i >= 0 ; i++) {} 

它不包括你已经注册了多less个I / Ocallback,定时器设置为closures,或者等待被读取的套接字。 直到V8从无限循环返回,节点没有更多的工作。

这是节点编程非常好的一部分。 你永远不必担心locking。 没有比赛条件或关键部分。 只有一个线程在你的JavaScript代码运行。

只有一个线程(事件循环),除非执行I / O之类的asynchronous操作,否则不会中断代码。 您不能执行任何并行代码。 所以ii ++是primefaces的

在node.js中解释什么是和不是asynchronous的好文章是理解node.js事件循环 。 如果你能理解你将能够识别你的应用程序在哪里有asynchronous行为,哪些不是。 通过了解这一点,您可以在需要时明确编写顺序代码。 EventEmitters是关键。

单线程听起来与node.js是高性能和可扩展的想法不一致,所以看看这篇来自雅虎在Multicore上的文章 。