轻松创建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中启用ECMAScript 6小结(windos以及Linux)
Jul 15 NodeJs
基于NodeJS的前后端分离的思考与实践(五)多终端适配
Sep 26 NodeJs
基于nodejs+express(4.x+)实现文件上传功能
Nov 23 NodeJs
浅谈Nodejs应用主文件index.js
Aug 28 NodeJs
NodeJS和BootStrap分页效果的实现代码
Nov 07 NodeJs
nodejs个人博客开发第六步 数据分页
Apr 12 NodeJs
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
May 13 NodeJs
NodeJS链接MySql数据库的操作方法
Jun 27 NodeJs
让nodeJS支持ES6的词法----babel的安装和使用方法
Jul 31 NodeJs
nodejs 图片预览和上传的示例代码
Sep 30 NodeJs
nodejs实现范围请求的实现代码
Oct 12 NodeJs
用Nodejs实现在终端中炒股的实现
Oct 18 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
介绍几个array库的新函数 php
2006/12/29 PHP
php select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
2013/06/03 PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
2015/04/03 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
2017/05/23 PHP
JavaScript常用脚本汇总(一)
2015/03/04 Javascript
javascript产生随机数方法汇总
2016/01/25 Javascript
JavaScript的Backbone.js框架的一些使用建议整理
2016/02/14 Javascript
Angular ng-repeat 对象和数组遍历实例
2016/09/14 Javascript
Javascript获取图片原始宽度和高度的方法详解
2016/09/20 Javascript
AngularJS中如何使用echart插件示例详解
2016/10/26 Javascript
javascript 内置对象及常见API详细介绍
2016/11/01 Javascript
bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
2017/02/10 Javascript
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
vue实现表格增删改查效果的实例代码
2017/07/18 Javascript
JavaScript数据结构之栈实例用法
2019/01/18 Javascript
这样回答继承可能面试官更满意
2019/12/10 Javascript
Javascript幻灯片播放功能实现过程解析
2020/05/07 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
微信小程序入门之指南针
2020/10/22 Javascript
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
2020/11/11 Javascript
在Python下进行UDP网络编程的教程
2015/04/29 Python
分享Python开发中要注意的十个小贴士
2016/08/30 Python
Python集中化管理平台Ansible介绍与YAML简介
2019/06/12 Python
python实现机器人卡牌
2019/10/06 Python
python tornado使用流生成图片的例子
2019/11/18 Python
python中栈的原理及实现方法示例
2019/11/27 Python
新西兰珠宝品牌:Michael Hill
2017/09/16 全球购物
设计师珠宝:Ylang 23
2018/05/11 全球购物
事业单位个人应聘自荐信
2013/09/21 职场文书
八项规定整改措施
2014/02/12 职场文书
机电一体化求职信
2014/03/10 职场文书
玄武湖导游词
2015/02/05 职场文书
奖励通知
2015/04/22 职场文书
Python合并多张图片成PDF
2021/06/09 Python