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


Posted in NodeJs onDecember 18, 2014

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

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

requestHandlers.js

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)来实现并行操作,我们应该要充分利用这一点 —— 尽可能的避免阻塞操作,取而代之,多使用非阻塞操作。

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

NodeJs 相关文章推荐
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
Nov 18 NodeJs
用nodejs实现PHP的print_r函数代码
Mar 14 NodeJs
nodejs开发微博实例
Mar 25 NodeJs
Nodejs中的this详解
Mar 26 NodeJs
用nodejs搭建websocket服务器
Jan 23 NodeJs
NodeJs下的测试框架Mocha的简单介绍
Feb 22 NodeJs
nodejs获取微信小程序带参数二维码实现代码
Apr 12 NodeJs
深入解析nodejs HTTP服务
Jul 25 NodeJs
Nodejs 和Session 原理及实战技巧小结
Aug 25 NodeJs
nodejs对express中next函数的一些理解
Sep 08 NodeJs
详解nodejs中express搭建权限管理系统
Sep 15 NodeJs
利用nodeJs anywhere搭建本地服务器环境的方法
May 12 NodeJs
轻松创建nodejs服务器(8):非阻塞是如何实现的
Dec 18 #NodeJs
轻松创建nodejs服务器(9):实现非阻塞操作
Dec 18 #NodeJs
轻松创建nodejs服务器(6):作出响应
Dec 18 #NodeJs
轻松创建nodejs服务器(5):事件处理程序
Dec 18 #NodeJs
轻松创建nodejs服务器(4):路由
Dec 18 #NodeJs
轻松创建nodejs服务器(3):代码模块化
Dec 18 #NodeJs
轻松创建nodejs服务器(2):nodejs服务器的构成分析
Dec 18 #NodeJs
You might like
PHP 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
thinkPHP中session()方法用法详解
2016/12/08 PHP
新浪中用来显示flash的函数
2007/04/02 Javascript
js类中的公有变量和私有变量
2008/07/24 Javascript
html 锁定页面(js遮罩层弹出div效果)
2009/10/27 Javascript
Javascript 复制数组实现代码
2009/11/26 Javascript
浅析hasOwnProperty方法的应用
2013/11/20 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
vue 中动态绑定class 和 style的方法代码详解
2018/06/01 Javascript
angularjs中判断ng-repeat是否迭代完的实例
2018/09/12 Javascript
JQuery属性操作与循环用法示例
2019/05/15 jQuery
js逆向解密之网络爬虫
2019/05/30 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
2019/06/10 Javascript
Vue事件修饰符native、self示例详解
2019/07/09 Javascript
ES6学习笔记之let与const用法实例分析
2020/01/22 Javascript
Openlayers3实现车辆轨迹回放功能
2020/09/29 Javascript
跟老齐学Python之有容乃大的list(2)
2014/09/15 Python
将Python代码打包为jar软件的简单方法
2015/08/04 Python
python开发之函数定义实例分析
2015/11/12 Python
Python中的迭代器与生成器高级用法解析
2016/06/28 Python
selenium+python实现自动化登录的方法
2018/09/04 Python
解决python中 f.write写入中文出错的问题
2018/10/31 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
一款基于css3的列表toggle特效实例教程
2015/01/04 HTML / CSS
怀旧收藏品和经典纪念品:Betty’s Attic
2018/08/29 全球购物
美国糖果店:Sugarfina
2019/02/21 全球购物
东方通信股份有限公司VC面试题
2014/08/27 面试题
为什么要使用servlet
2016/01/17 面试题
教师考察材料范文
2014/06/03 职场文书
党员先进性教育整改措施
2014/09/18 职场文书
房产公证书样本
2015/01/23 职场文书
承德避暑山庄导游词
2015/02/03 职场文书
2015年敬老月活动总结
2015/03/27 职场文书
结婚堵门保证书
2015/05/08 职场文书
如何使用CocosCreator对象池
2021/04/14 Javascript
CSS list-style-type属性使用方法
2023/05/21 HTML / CSS