轻松创建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 win7下安装方法
May 24 NodeJs
Nodejs实现多人同时在线移动鼠标的小游戏分享
Dec 06 NodeJs
Nodejs下DNS缓存问题浅析
Nov 16 NodeJs
实例分析nodejs模块xml2js解析xml过程中遇到的坑
Mar 18 NodeJs
nodejs使用express创建一个简单web应用
Mar 31 NodeJs
nodejs 终端打印进度条实例代码
Apr 22 NodeJs
nodejs后台集成ueditor富文本编辑器的实例
Jul 11 NodeJs
详解nodejs中express搭建权限管理系统
Sep 15 NodeJs
nodejs搭建本地服务器轻松解决跨域问题
Mar 21 NodeJs
nodejs 简单实现动态html的方法
May 12 NodeJs
NodeJS如何实现同步的方法示例
Aug 24 NodeJs
node快速搭建后台的实现步骤
Feb 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
php email邮箱正则
2008/10/08 PHP
php用正则表达式匹配中文实例详解
2013/11/06 PHP
php弹出对话框实现重定向代码
2014/01/23 PHP
Laravel Reponse响应客户端示例详解
2020/09/03 PHP
Js切换功能的简单方法
2010/11/23 Javascript
js 一个关于图片onload加载的事
2013/11/10 Javascript
JavaScript动态操作表格实例(添加,删除行,列及单元格)
2013/11/25 Javascript
js解析json读取List中的实体对象示例
2014/03/11 Javascript
Javascript的严格模式strict mode详细介绍
2014/06/06 Javascript
vue 项目如何引入微信sdk接口的方法
2017/12/18 Javascript
微信小程序下拉框组件使用方法详解
2018/12/28 Javascript
vue 中Virtual Dom被创建的方法
2019/04/15 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
Python使用稀疏矩阵节省内存实例
2014/06/27 Python
Python闭包实现计数器的方法
2015/05/05 Python
Python遍历指定文件及文件夹的方法
2015/05/09 Python
Python unittest模块用法实例分析
2018/05/25 Python
Python DataFrame 设置输出不显示index(索引)值的方法
2018/06/07 Python
对python添加模块路径的三种方法总结
2018/10/16 Python
python 字符串常用函数详解
2019/09/11 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
2020/04/13 Python
keras topN显示,自编写代码案例
2020/07/03 Python
详解Pycharm安装及Django安装配置指南
2020/09/15 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
利用Python过滤相似文本的简单方法示例
2021/02/03 Python
HTML5 input placeholder 颜色修改示例
2014/05/30 HTML / CSS
Allen Edmonds官方网站:一家美国优质男士鞋类及配饰制造商
2019/03/12 全球购物
SmartBuyGlasses德国:购买太阳镜和眼镜
2019/08/20 全球购物
外贸采购员求职的自我评价
2013/11/26 职场文书
行政文员实习自我鉴定范文
2014/09/14 职场文书
群众路线个人对照检查材料2014
2014/09/26 职场文书
网络妈妈观后感
2015/06/08 职场文书
七年级写作指导之游记作文
2019/10/07 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书
超级详细实用的pycharm常用快捷键
2021/05/12 Python
总结Python常用的魔法方法
2021/05/25 Python