Node.js开发指南学习记录1

原创 2015年11月18日 23:20:19

1异步式 I/O 与事件驱动

Node.js最大的特点就是采用异步式I/O与事件驱动的架构设计。对于高并发的解决方案,传统的架构是多线程模型,也就是为每个业务逻辑提供一个系统线程,通过系统线程切换来弥补同步式I/O调用时的时间开销。

Node.js使用的是单线程模型,对于所有I/O都采用异步式的请求方式,避免了频繁的上下文切换。Node.js在执行的过程中会维护一个事件队列,程序在执行时进入事件循环等待下一个事件到来,每个异步式I/O请求完成后会被推送到事件队列,等待程序进程进行处理。

样例对比:

一个简单而常见的数据库查询操作,按照传统方式实现的代码:

res = db.query('select * from some_table');

res.output();

代码执行到第一行的时候,线程会阻塞,等待数据库返回查询结果,然后再继续处理。然而,由于数据库查询可能涉及磁盘读写和网络通信,其延时可能相当大(长达几个到几百毫秒,相比CPU的时钟差了好几个数量级),线程会在这里阻塞等待结果返回。对于高并发的访问,一方面线程长期阻塞等待,另一方面为了应付新请求而不断增加线程,因此会浪费大量系统资源,同时线程的增多也会占用大量的CPU时间来处理内存上下文切换,而且还容易遭受低速连接攻击。

Node.js的解决方法:

db.query(

'select * from some_table', function(res){

res.output();

});

这段代码中db.query的第二个参数是一个函数,我们成为回调函数。进程在执行到db.query的时候,不会等待结果返回,而是直接继续执行后面的语句,直到进入事件循环。

当数据库查询结果返回时,会将事件发送到事件队列,等到线程进入事件循环以后,才会调用之前的回调函数继续执行后面的逻辑。

Node.js的异步机制是基于事件的,所有的磁盘I/O、网络通信、数据库查询都以非阻塞的方式请求,返回的结果由事件循环来处理。以下的机制效果图:


《Node入门》读书笔记——用Node.js开发一个小应用

如需转载请注明出处 http://blog.csdn.net/as645788 Android APP的开发告一段落,一个稳定的、实现了基本功能的APP已经交付用户使用了!我和老板交流了下,接下来准...
  • as645788
  • as645788
  • 2015年08月16日 10:54
  • 1266

Node.js学习记录1

node特性1,单线程、异步、非阻塞io 。 2,事件驱动、事件环。 1,异步式io对于高并发解决方案, 传统架构:为每个请求创建一个新的线程,每个线程开辟独立工作内存空间,由cpu进行线程间切换调度...
  • z744760295
  • z744760295
  • 2016年10月11日 14:39
  • 156

BOOST库 学习参考完全开发指南(更新完毕)

本文由 \color{blue}{\bf本文由} @DavidHan\color{red}{\it @David Han}出品,转载请注明出处\color{blue}{ \bf出品 ,转载请注明出处...
  • David_Han008
  • David_Han008
  • 2017年09月01日 17:02
  • 353

Node.js开发指南学习笔记

1.1     快速入门 1.1.1    异步式I/O与事件式编程 异步式 I/O (Asynchronous I/O)或非阻塞式 I/O (Non-blocking I/O)则针对所有 I/O 操...
  • noted2011
  • noted2011
  • 2013年12月01日 22:42
  • 810

Android编程权威指南(第二版)学习笔记(十三)—— 第13章 工具栏(Toolbar)

本章主要讲了如何使用 ToolBar,顺便普及了 AppCompat 的由来和 app 命名空间的知识...
  • kniost
  • kniost
  • 2016年11月24日 11:45
  • 922

《node.js开发指南》观后感

最近在当当网上买了一本《node.js开发指南》,从学习node.js到现在看的第一本中文教程,也算献出了自己处子之身啊,哈哈。前后大约花了4,5个小时通读了node.js部分,附录部分只是略过了,谈...
  • luozhonghua2014
  • luozhonghua2014
  • 2014年07月25日 11:43
  • 425

《Node.js开发指南》读书笔记

继续学学node.js。翻开书首先被惊到=。=:作者BYVoid是清华大学2010级本科……同样是2010级本科,我真是无语凝噎,大学浪费了好多时间。不过过去的已经过去了,接下来好好努力提高才好,加油...
  • Creabine
  • Creabine
  • 2016年08月16日 18:05
  • 1418

Node.js开发指南

Node.js简介我们可以认为,Node.js 中所谓的 JavaScript 只是 Core JavaScript,或者说是 ECMAScript 的一个实现,不包含 DOM、BOM 或者 Clie...
  • sysuzhyupeng
  • sysuzhyupeng
  • 2017年05月01日 15:01
  • 273

Node.js开发指南

看到Node.js这个名字,初学者可能会误以为这是一个Javascript应用,事实上,Node.js采用C++语言编写而   成,是一个Javascript的运行环境。既然不是Javascrip...
  • lilin520530
  • lilin520530
  • 2017年04月07日 13:59
  • 120

Node.js 推荐20多个学习网站及书籍

Node.js 推荐20多个学习网站及书籍 Web 开发人员对 Node.js 日益增多,更多的公司和开发者开始尝试使用 Node.js 来实现一些对实时性要求高,I/O密集型的业务。 很不错的书籍和...
  • ejinxian
  • ejinxian
  • 2014年06月06日 08:03
  • 2561
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Node.js开发指南学习记录1
举报原因:
原因补充:

(最多只允许输入30个字)