相关疑难解决方法(0)

单线程非阻塞IO模型如何在Node.js中工作

我不是Node程序员,但我对单线程非阻塞IO模型的工作原理感兴趣.在我阅读了文章理解-node-js-event-loop之后,我真的很困惑.它给出了该模型的一个例子:

c.query(
   'SELECT SLEEP(20);',
   function (err, results, fields) {
     if (err) {
       throw err;
     }
     res.writeHead(200, {'Content-Type': 'text/html'});
     res.end('<html><head><title>Hello</title></head><body><h1>Return from async DB query</h1></body></html>');
     c.end();
    }
);
Run Code Online (Sandbox Code Playgroud)

这是一个问题.当有两个请求A(至上)和B,由于只有一个线程,服务器端程序将处理请求的第一:做SQL查询这是一个睡眠声明站立I/O等待.并且程序停留在I/O等待,并且无法执行呈现网页的代码.程序会在等待期间切换到请求B吗?在我看来,由于单线程模型,没有办法从一个请求切换另一个请求.但是示例代码的标题说"除了代码之外,所有内容都是并行运行".(PS我不确定我是否误解了代码,因为我从未使用过Node.)节点如何在等待期间切换到B?你能用一种简单的方法解释Node的单线程非阻塞IO模型吗?如果你能帮助我,我将不胜感激.:)

node.js

323
推荐指数
5
解决办法
10万
查看次数

了解NodeJS和非阻塞IO

所以,我最近注射了Node病毒,它正在编程世界中迅速传播.

我对它的"非阻塞IO"方法很着迷,并且我自己也试过了几个程序.

但是,我目前无法理解某些概念.

我需要外行术语的答案(有人来自Java背景)

1.多线程和非阻塞IO.

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

..
..
   // Read HTTP Parameters
   // Do some Database work
   // Do some file work
   // Return a confirmation message
..
..
Run Code Online (Sandbox Code Playgroud)

在传统的编程语言中,上述顺序发生.并且,如果有多个注册请求,则Web服务器会创建一个新线程,其余的都是历史记录.当然,程序员可以创建自己的线程,同时在第2行和第3行上工作.

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

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

2.可扩展性

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

任何人都可以解释它是如何产生这样的差异的?

3.适应其他编程语言

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

我确定我错过了什么.只有你能解释我并指导我一些链接,才会有所帮助.

谢谢.

java nonblocking node.js

19
推荐指数
1
解决办法
1万
查看次数

标签 统计

node.js ×2

java ×1

nonblocking ×1