轻松创建nodejs服务器(7):阻塞操作的实现

 更新时间:2014年12月18日 11:14:20   投稿:junjie  
这篇文章主要介绍了轻松创建nodejs服务器(7):阻塞操作的实现,本文先是组出了代码,然后对代码一一分析,需要的朋友可以参考下

我们来看一下什么是阻塞操作;

我模拟一个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)来实现并行操作,我们应该要充分利用这一点 —— 尽可能的避免阻塞操作,取而代之,多使用非阻塞操作。

下一节我们将介绍一下如何实现非阻塞操作。

相关文章

  • 详解50行代码,Node爬虫练手项目

    详解50行代码,Node爬虫练手项目

    这篇文章主要介绍了50行代码,Node爬虫练手项目,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Node.js的包详细介绍

    Node.js的包详细介绍

    这篇文章主要介绍了Node.js的包详细介绍,Node.js的包是一个目录,其中包含JSON格式的包说明文件package.json,Node.js的包基本遵循CommonJS规范,需要的朋友可以参考下
    2015-01-01
  • Node.js中处理错误的4种最佳方法分享

    Node.js中处理错误的4种最佳方法分享

    错误处理并不是编码工作中最吸引人的部分,但在 Node.js 中构建可靠、生产级别的应用程序时,它是绝对必要的,下面小编就来为大家介绍一下Node.js中处理错误的4种最佳方法吧
    2025-02-02
  • node.js中的path.resolve方法使用说明

    node.js中的path.resolve方法使用说明

    这篇文章主要介绍了node.js中的path.resolve方法使用说明,本文介绍了path.resolve的方法说明、接收参数、语法、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • node.js中的path.normalize方法使用说明

    node.js中的path.normalize方法使用说明

    这篇文章主要介绍了node.js中的path.normalize方法使用说明,本文介绍了path.normalize的方法说明、语法、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • node.js的require()及基本用法

    node.js的require()及基本用法

    Node.js使用CommonJS模块格式,通过require语句加载模块,源码分析了require语句的内部运行机制,包括基本用法、Module构造函数、模块实例的require方法、模块的绝对路径、加载模块等,本文介绍node.js的require()及基本用法,感兴趣的朋友一起看看吧
    2025-02-02
  • node 使用 async 控制并发的方法

    node 使用 async 控制并发的方法

    这篇文章主要介绍了node 使用 async 控制并发的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 浅析node命令行交互原理

    浅析node命令行交互原理

    当我们使用脚手架去创建一个项目的时候,通常会通过命令行交互来获取一些信息,比如填项目名称,选择项目模板,选择版本,我们虽然经常用到,但是想必对于其中的原理还是不太了解,本文将待大家详细介绍一下node命令行的交互原理,需要的朋友可以参考下
    2023-05-05
  • Node.js插件安装图文教程

    Node.js插件安装图文教程

    Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。本文给大家介绍Node.js插件安装的教程,非常实用,特此分享给大家,需要的朋友一起学习吧
    2016-05-05
  • nodejs实现获取当前url地址及url各种参数值

    nodejs实现获取当前url地址及url各种参数值

    这篇文章主要介绍了nodejs实现获取当前url地址及url各种参数值,本文直接给出代码实例,需要的朋友可以参考下
    2015-06-06

最新评论