【发布时间】:2015-02-25 16:36:29
【问题描述】:
我是 Node 新手,并尝试了解 Node 的非阻塞性质。
在下图中,我创建了请求的高级图表。
据我了解,来自单个用户的单个应用程序的所有进程都在单个线程上运行。
我想了解的是事件循环的逻辑如何适合这个图表。事件循环是否与指令排队的处理器管道相同?
想象一下,我们将一个应用页面加载到 RAM 中,该页面创建一个流以供程序读取:
readstream.on('data', function(data) {});
创建读取流和等待数据发生的指令:该指令是否“挂起”在处理器的寄存器中(等待 I/O 完成),而在多线程环境中,处理器只是不占用直到前一个 I/O 请求的结果返回到 RAM 之前从 RAM 中获取新指令?
还是我认为这完全/部分错误的方式?
只是一个补充(相关的,也许是愚蠢的)问题:在服务器上的不同线程上运行不同的用户,单线程的好处不是只对单个用户有用吗?
我对这种类型的细节不熟悉,如果这个问题对你来说不完全有意义,请原谅。但在继续前进之前,理解这一点对我来说似乎是必不可少的。
【问题讨论】:
-
不幸的是,关于这件事的几乎所有事情都是错误的。
-
很难说清楚;从字面上看,这完全是错误的。事件循环与 CPU 架构无关——完全没有关系。这些概念完全不相关。
-
嗯,我觉得这是一个很难掌握的概念,因为我是新手。我读到好处是关于单线程,这与从 RAM 中获取指令的方式有关。当指令执行并等待数据导入时,指令必须在某个地方等待执行和关闭,不是吗?好的,如果指令处理器的管道不相关。但是我找不到一些可读的文档来更详细地了解这一点,以进一步帮助我。一些答案会有所帮助。谢谢。
-
线程与 CPU 架构也没有太大关系。 Node 是一个 JavaScript 系统,它的工作方式与 CPU 架构的细节相去甚远。重要的是操作系统如何工作,因为这是直接涉及的,而不是 RAM 或指令管道。
-
@Pointy 我很困惑......我读到的关于进程/线程的大部分内容都与处理器有关,以及在切换以使它们看起来同时执行时多个线程的管理方式。这是节点没有的,这是我想了解的。我会进一步看。对不起,如果这个问题很愚蠢,也许我在对该主题进行更多研究时看到了你所看到的。
标签: javascript node.js processor single-threaded