首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >了解NodeJS和非阻塞IO

了解NodeJS和非阻塞IO
EN

Stack Overflow用户
提问于 2013-08-04 14:36:43
回答 2查看 10.8K关注 0票数 19

所以,我最近被注射了Node病毒,它在编程世界中传播得非常快。

我对它的“非阻塞IO”方法很着迷,我自己也确实尝试过几个程序。

不过,我现在并不明白某些概念。

我需要外行的答案(有Java背景的人)

1.多线程和非阻塞IO.

让我们考虑一个实际的场景。比方说,我们有一个用户可以注册的网站。下面是代码。

代码语言:javascript
复制
..
..
   // Read HTTP Parameters
   // Do some Database work
   // Do some file work
   // Return a confirmation message
..
..

在传统的编程语言中,上述操作是按顺序进行的。而且,如果有多个注册请求,web服务器会创建一个新线程,剩下的就是历史记录。当然,程序员可以创建自己的线程来同时在第二行和第三行工作。

据我所知,在Node中,第2行和第3行将并行运行,而程序的其余部分将被执行,解释器每隔'x‘ms轮询第2行和第3行。

现在,我的问题是,如果Node是单线程语言,那么在执行程序的其余部分时,第2行和第3行的工作是什么?

2.可伸缩性

我最近读到LinkedIn已经将Node调整为其移动应用的后端,并看到了巨大的改进。

有谁能解释一下它是如何造成如此大的不同的?

3.适应其他编程语言

如果人们声称Node在性能方面有很大的不同,为什么其他编程语言没有采用这种非阻塞IO范例?

我肯定我漏掉了什么。只有如果你能解释我和指导我与一些链接,将是有帮助的。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2014-12-12 20:48:34

Q1。“当程序的其余部分正在执行时,第2行和第3行的作业是什么?”答案是:“什么都没有”。第2行和第3行各自开始各自的作业,但这些作业不能立即完成,因为(例如)所需的磁盘扇区尚未加载-因此操作系统向磁盘发出调用以获取这些扇区,然后“什么也没有发生”(节点继续执行其下一个任务),直到磁盘子系统(稍后)发出中断以报告它们已准备就绪,此时节点将控制权返回到第#2和#3行。

Q2。单线程非阻塞几乎不会为每个传入连接提供任何资源(只有一些关于连接的套接字的内务数据)。它的内存效率非常高。传统的web服务器会“分叉”一个全新的进程来处理每个新的连接--这意味着对所需的每一位代码和数据变量进行巨大的复制,并对CPU进行时间切片以处理所有这些问题。这是对资源的巨大浪费。因此--如果你的负载是大量等待处理的空闲连接,就像他们的负载一样,那么node会让负载变得更有意义。

Q3。如果你想使用非阻塞I/O,几乎每种编程语言都已经有了它。Node不是一种编程语言,它是一种运行javascript并使用非阻塞I/O的web服务器(例如: 10年前我个人用perl编写了相同的东西,就像google ( C)刚开始时一样,我相信很多其他人也有类似的web服务器)。非阻塞I/O并不是最难的部分-让程序员理解如何使用它才是棘手的部分。Javascript恰好可以很好地实现这一点,因为这些程序员已经熟悉事件编程。

票数 3
EN

Stack Overflow用户

发布于 2015-10-10 05:46:36

尽管node.js已经存在了几年,但它的性能模型仍然有点神秘。

我最近开了一个博客,并决定node.js模型将是一个很好的第一个主题,因为我想更好地理解它,它将有助于其他人分享我所学到的东西。以下是我写的几篇文章,解释了高级概念和一些权衡:

Blocking vs. Non-Blocking I/O – What’s going on?

Understanding node.js Performance

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18040366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档