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

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.js学习
想对作者说点什么? 我来说一句

Node.js开发指南

2013年08月03日 5.61MB 下载

node.js开发指南》 高清PDF版

2018年01月15日 5.54MB 下载

Node.js开发指南_中文 PDF电子书

2016年04月02日 5.61MB 下载

Node.js开发指南(高清PDF完整版)

2015年12月17日 5.61MB 下载

Node.js基础开发指南_中文正版

2018年05月21日 5.61MB 下载

Node.js开发指南.zip

2012年12月24日 5.73MB 下载

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭