源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-12-20 17:49 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:轻松创建nodejs服务器(7):阻塞操作的实现
我们来看一下什么是阻塞操作; 我模拟一个sleep()方法来使hello star延迟10秒打印。 requestHandlers.js
[u]复制代码[/u] 代码如下:
function start() {   console.log("Request handler 'start' was called.");   function sleep(milliSeconds) {  var startTime = new Date().getTime();  while (new Date().getTime() < startTime + milliSeconds);   }   sleep(10000);   return "Hello Start"; }   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)来实现并行操作,我们应该要充分利用这一点 —— 尽可能的避免阻塞操作,取而代之,多使用非阻塞操作。 下一节我们将介绍一下如何实现非阻塞操作。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部