轻松创建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教程之制作一个简单的文章发布系统
Nov 21 NodeJs
浅析nodejs实现Websocket的数据接收与发送
Nov 19 NodeJs
Nodejs如何复制文件
Mar 09 NodeJs
使用nodejs下载风景壁纸
Feb 05 NodeJs
nodejs个人博客开发第五步 分配数据
Apr 12 NodeJs
Nodejs中Express 常用中间件 body-parser 实现解析
May 22 NodeJs
基于nodejs实现微信支付功能
Dec 20 NodeJs
nodejs实现的简单web服务器功能示例
Mar 15 NodeJs
nodejs实现范围请求的实现代码
Oct 12 NodeJs
如何利用nodejs自动定时发送邮件提醒(超实用)
Dec 01 NodeJs
分享五个Node.js开发的优秀实践 
Apr 07 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 adodb介绍
2009/03/19 PHP
兼容性比较好的PHP生成缩略图的代码
2011/01/12 PHP
php添加文章时生成静态HTML文章的实现代码
2013/02/17 PHP
PHP implode()函数用法讲解
2019/03/08 PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
2019/10/18 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
找到一点可怜的关于dojo资料,谢谢作者!
2006/12/06 Javascript
用javascript动态调整iframe高度的代码
2007/04/10 Javascript
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
Array.prototype.slice 使用扩展
2010/06/09 Javascript
字符串的replace方法应用浅析
2011/12/06 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
JS实现先显示大图后自动收起显示小图的广告代码
2015/09/04 Javascript
详解JavaScript对Date对象的操作问题(生成一个倒数7天的数组)
2015/10/01 Javascript
小程序自定义组件实现城市选择功能
2018/07/18 Javascript
少女风vue组件库的制作全过程
2019/05/15 Javascript
vue登录注册实例详解
2019/09/14 Javascript
python爬虫之百度API调用方法
2017/06/11 Python
EM算法的python实现的方法步骤
2018/01/02 Python
Go/Python/Erlang编程语言对比分析及示例代码
2018/04/23 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
2020/05/18 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
美国大城市最热门旅游景点门票:CityPASS
2016/12/16 全球购物
劳资员岗位职责
2013/11/11 职场文书
教师拔河比赛广播稿
2014/10/14 职场文书
2014小学数学教研组工作总结
2014/12/06 职场文书
2014年学校教学工作总结
2014/12/06 职场文书
2014年干部培训工作总结
2014/12/17 职场文书
欢送领导祝酒词
2015/08/12 职场文书
最美劳动诗,致敬所有的劳动者!
2019/07/12 职场文书
导游词之泉州崇武古城
2019/12/20 职场文书
zabbix agent2 监控oracle数据库的方法
2021/05/13 Oracle
python人工智能human learn绘图可创建机器学习模型
2021/11/23 Python
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL
部分武汉产收音机展览
2022/04/07 无线电
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技