轻松创建nodejs服务器(7):阻塞操作的实现

前端之家收集整理的这篇文章主要介绍了轻松创建nodejs服务器(7):阻塞操作的实现前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我们来看一下什么是阻塞操作;

我模拟一个sleep()方法来使hello star延迟10秒打印。

requestHandlers.js

代码如下:
function upload() {
console.log("Request handler 'upload' was called.");
return "Hello Upload";
}

exports.start = start;
exports.upload = upload;

请求/start的时候,延迟了10秒才打印。

请求/upload的时候,并不会受影响。

接下来做一个试验:

在第一个浏览器窗口的地址栏中输入 http://localhost:8888/start,但是先不要打开它!

在第二个浏览器窗口的地址栏中输入 http://localhost:8888/upload,同样的,先不要打开它!

我们在第一个窗口中(“/start”)按下回车,然后快速切换到第二个窗口中(“/upload”)按下回车。

注意,发生了什么:

/start URL 加载花了 10 秒,这和我们预期的一样。

/upload URL 居然也花了 10 秒!

可以它在对应的请求处理程序中并没有类似于 sleep()这样的操作啊,这是什么问题?

原因就是start()包含了阻塞操作。形象的说就是“它阻塞了所有其他的处理工作”。

Node.js 是单线程的,它可以在不新增额外线程的情况下对任务进行并行处理。

它通过事件轮询(event loop)来实现并行操作,我们应该要充分利用这一点 —— 尽可能的避免阻塞操作,取而代之,多使用非阻塞操作。

下一节我们将介绍一下如何实现非阻塞操作。

猜你在找的Node.js相关文章