轻松创建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服务器(6):作出响应
Dec 18 NodeJs
NodeJS远程代码执行
Aug 28 NodeJs
详解nodejs模板引擎制作
Jun 14 NodeJs
详解HTTPS 的原理和 NodeJS 的实现
Jul 04 NodeJs
NodeJS使用七牛云存储上传文件的方法
Jul 24 NodeJs
详解nodeJs文件系统(fs)与流(stream)
Jan 24 NodeJs
Nodejs模块载入运行原理
Feb 23 NodeJs
手把手教你如何使用nodejs编写cli命令行
Nov 05 NodeJs
基于nodejs的微信JS-SDK简单应用实现
May 21 NodeJs
nodejs一个简单的文件服务器的创建方法
Sep 13 NodeJs
Nodejs + Websocket 指定发送及群聊的实现
Jan 09 NodeJs
nodejs使用socket5进行代理请求的实现
Feb 21 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
require(),include(),require_once()和include_once()区别
2008/03/27 PHP
解析centos中Apache、php、mysql 默认安装路径
2013/06/25 PHP
使用php伪造referer的方法 利用referer防止图片盗链
2014/01/20 PHP
php文件上传你必须知道的几点
2015/10/20 PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
2019/10/18 PHP
JavaScript入门教程(11) js事件处理
2009/01/31 Javascript
不同浏览器对回车提交表单的处理办法
2010/02/13 Javascript
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
2010/12/11 Javascript
Jquery uploadify图片上传插件无法上传的解决方法
2013/12/16 Javascript
jqGrid读取选择的多行的某个属性代码
2014/05/18 Javascript
使用javascript实现Iframe自适应高度
2014/12/24 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
2015/05/09 Javascript
基于jQuery日历插件制作日历
2016/03/11 Javascript
jQuery将表单序列化成一个Object对象的实例
2016/11/29 Javascript
Javascript之面向对象--接口
2016/12/02 Javascript
JavaScript实现精美个性导航栏筋斗云效果
2017/10/29 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
bootstrap里bootstrap动态加载下拉框的实例讲解
2018/08/10 Javascript
node微信开发之获取access_token+自定义菜单
2019/03/17 Javascript
js实现验证码干扰(静态)
2021/02/22 Javascript
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
python中的一些类型转换函数小结
2013/02/10 Python
TensorFlow实现创建分类器
2018/02/06 Python
pandas数据集的端到端处理
2019/02/18 Python
基于sklearn实现Bagging算法(python)
2019/07/11 Python
python如何实现不用装饰器实现登陆器小程序
2019/12/14 Python
Python控制鼠标键盘代码实例
2020/12/08 Python
英国票务网站:Ticketmaster英国
2018/08/27 全球购物
高级3D打印市场:Gambody
2019/12/26 全球购物
门卫人员岗位职责
2013/12/24 职场文书
个人三严三实对照检查材料
2014/09/25 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
大学生学年个人总结
2015/02/15 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书
《工作是最好的修行》读后感3篇
2019/12/13 职场文书
Python+Selenium自动化环境搭建与操作基础详解
2022/03/13 Python