相关疑难解决方法(0)

为什么Node.JS中的函数和回调都是非阻塞的?

新手对Node的理解是,如果我重写同步或内联代码来利用函数/回调,我可以确保我的代码是非阻塞的.我很好奇这是如何在事件堆栈方面工作的.这里的简单示例:不了解回调 - Stackoverflow是否会阻止:

var post = db.query("select * from posts where id = 1");
doSomethingWithPost(post)
doSomethingElse();
Run Code Online (Sandbox Code Playgroud)

虽然这不会:

callback = function(post){
doSomethingWithPost(post)
}

db.query("select * from posts where id = 1",callback);
doSomethingElse();
Run Code Online (Sandbox Code Playgroud)

好的,我知道我们应该使用回调.但就事件堆栈而言,为什么这样做呢?Javascript是单线程..在第一个示例行中,一个使用昂贵的阻塞I/O操作.在第一行完成之前,第2行无法执行.这是因为第2行需要第1行的信息吗?或者是因为I/O事件只是从根本上阻止了操作,这意味着他们抓住了控制权并且在完成之前不再回复...

在第二个例子中,昂贵的I/O已被移动到一个函数中,我们现在有一个回调函数.当然,在完成I/O之前,回调不能执行.这不会改变.因此,执行1到2之间所需的时间差异必须主要是第二个请求到达服务器时会发生的情况.

如果第二个请求遇到示例一,它将无法处理,直到请求1由于阻塞操作而完成..但在示例二中..将操作移动到函数中会自动生成子进程或充当多线程?如果Javscript是单线程的,那么除非有某种方式进行并行处理,否则这仍然会产生问题.如果我们使用非阻塞技术(如子进程等),函数/回调是否仅保证是非阻塞的. .

nonblocking node.js

11
推荐指数
1
解决办法
2612
查看次数

标签 统计

node.js ×1

nonblocking ×1