轻松创建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读取memcache示例分享
Jan 02 NodeJs
跟我学Nodejs(一)--- Node.js简介及安装开发环境
May 20 NodeJs
nodejs实现的一个简单聊天室功能分享
Dec 06 NodeJs
Nodejs学习笔记之测试驱动
Apr 16 NodeJs
Nodejs学习item【入门手上】
May 05 NodeJs
Nodejs实现短信验证码功能
Feb 09 NodeJs
nodejs入门教程三:调用内部和外部方法示例
Apr 24 NodeJs
详解nodejs通过代理(proxy)发送http请求(request)
Sep 22 NodeJs
nodejs调取微信收货地址的方法
Dec 20 NodeJs
nodejs分离html文件里面的js和css的方法
Apr 09 NodeJs
Nodejs实现用户注册功能
Apr 14 NodeJs
分享node.js实现简单登录注册的具体代码
Apr 26 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中的函数嵌套层数限制分析
2011/06/13 PHP
PHP计算2点经纬度之间的距离代码
2013/08/12 PHP
PHP调试函数和日志记录函数分享
2015/01/31 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
2019/02/15 PHP
用javascript控制iframe滚动的代码
2007/04/10 Javascript
js的with语句使用方法
2007/09/21 Javascript
Javascript 中介者模式实例
2009/12/16 Javascript
javascript中的作用域scope介绍
2010/12/28 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
jQuery中siblings()方法用法实例
2015/01/08 Javascript
JS动态显示表格上下frame的方法
2015/03/31 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
2015/09/07 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
2016/01/31 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
request请求获取参数的实现方法(post和get两种方式)
2016/09/27 Javascript
React中的refs的使用教程
2018/02/13 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
2019/04/14 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
tracking.js实现前端人脸识别功能
2020/04/16 Javascript
js+for循环实现字符串自动转义的代码(把后面的字符替换前面的字符)
2020/12/24 Javascript
零基础学Python(一)Python环境安装
2014/08/20 Python
python统计字符串中指定字符出现次数的方法
2015/04/04 Python
Python导出数据到Excel可读取的CSV文件的方法
2015/05/12 Python
详解Python最长公共子串和最长公共子序列的实现
2018/07/07 Python
Python爬虫之正则表达式的使用教程详解
2018/10/25 Python
用Python PIL实现几个简单的图片特效
2019/01/18 Python
python函数map()和partial()的知识点总结
2020/05/26 Python
python 深度学习中的4种激活函数
2020/09/18 Python
Conforama西班牙:您的家具、装饰和电器商店
2020/02/21 全球购物
我看到了用指针调用函数的不同语法形式
2014/07/16 面试题
如何打印出当前源文件的文件名以及源文件的当前行号
2015/04/05 面试题
单位委托书范本
2014/04/04 职场文书
监察建议书格式
2014/05/19 职场文书
2016学习医德医风心得体会
2016/01/25 职场文书