轻松创建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服务器(8):非阻塞是如何实现的
Dec 18 NodeJs
NodeJS学习笔记之(Url,QueryString,Path)模块
Jan 13 NodeJs
浅析Nodejs npm常用命令
Jun 14 NodeJs
NodeJS基础API搭建服务器详细过程记录
Apr 01 NodeJs
配置nodejs环境的方法
May 13 NodeJs
nodejs操作mysql实现增删改查的实例
May 28 NodeJs
Nodejs下使用gm圆形裁剪并合成图片的示例
Feb 22 NodeJs
webstorm中配置nodejs环境及npm的实例
May 15 NodeJs
nodejs提示:cross-device link not permitted, rename错误的解决方法
Jun 10 NodeJs
nodejs和react实现即时通讯简易聊天室功能
Aug 21 NodeJs
nodejs实现的http、https 请求封装操作示例
Feb 06 NodeJs
NodeJS配置CORS实现过程详解
Dec 02 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版)
2006/10/09 PHP
php之Memcache学习笔记
2013/06/17 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
2019/09/08 PHP
JQuery Study Notes 学习笔记(一)
2010/08/04 Javascript
{}与function(){}选用空对象{}来存放keyValue
2012/05/23 Javascript
jQuery on方法传递参数示例
2014/12/09 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
2015/02/13 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
2015/07/22 Javascript
在for循环中length值是否需要缓存
2015/07/27 Javascript
详解Js模板引擎(TrimPath)
2016/11/22 Javascript
根据Bootstrap Paginator改写的js分页插件
2016/12/25 Javascript
JavaScript实现点击出现图片并统计点击次数功能示例
2018/07/23 Javascript
vue中typescript装饰器的使用方法超实用教程
2019/06/17 Javascript
Vue.js组件通信之自定义事件详解
2019/10/19 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
2020/01/11 jQuery
mapboxgl实现带箭头轨迹线的代码
2021/01/04 Javascript
JS相册图片抖动放大展示效果的示例代码
2021/01/29 Javascript
vue实现拖拽进度条
2021/03/01 Vue.js
Linux下使用python调用top命令获得CPU利用率
2015/03/10 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
django框架模板中定义变量(set variable in django template)的方法分析
2019/06/24 Python
如何在Cloud Studio上执行Python代码?
2019/08/09 Python
Python Web框架之Django框架cookie和session用法分析
2019/08/16 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
Pytorch之卷积层的使用详解
2019/12/31 Python
tensorflow实现对张量数据的切片操作方式
2020/01/19 Python
Python基于QQ邮箱实现SSL发送
2020/04/26 Python
Python 如何对文件目录操作
2020/07/10 Python
发现两个有趣的CSS3动画效果
2013/08/14 HTML / CSS
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
办公室文秘自我评价
2013/09/21 职场文书
通息工程毕业生自荐信
2013/10/16 职场文书
秋天的雨教学反思
2014/04/27 职场文书
三八红旗集体先进事迹材料
2014/05/22 职场文书
工程售后服务方案
2014/06/08 职场文书
岳庙导游词
2015/02/04 职场文书