首页 > PHP资讯 > HTML5培训技术 > 关于node.js的误会

关于node.js的误会

HTML5培训技术
昨天写了篇博客,介绍了一下我对node.js的第一次亲密接触后的感受,以为node.js很小众,出乎我意料很多人感兴趣,并且对博客中的细节问题做了评论,最多的是围绕node.js的异步与单线程展开的,当然还有很多关于node.js究竟是不是语言?不是的话又是什么。。。之类的问题,其实刚接触node.js,了解的并不是很深入,越是回复大家问题,心里越是没底,决定认真研究一下,经人指点看了一下《Node.js开发指南》发现大部分问题都有了答案,权当一个读书笔记把问题答案分享出来,希望可以帮到一些和我一样才接触node.js的小菜
 
 关于单线程一个由来已久的误会
在上篇博客中提到我们使用node.js写的JavaScript代码是单线程运行的,让很多同学很疑惑,单线程怎么实现异步操作,单线程谁去响应事件。。。在html5 Web Workers中我也有提到过客户端的JavaScript也是单线程运行的,大家明显没有这么大反应,还是普遍能接受的。可单线程的客户端JavaScript也能响应DOM事件,还有大家都很熟悉的ajax操作,回调函数也是异步的,既然客户端JavaScript是单线程执行的,回调函数是谁调用的呢?答案很简单,JavaScript的宿主环境—— script的同学一眼就可以看明白query的第二个参数是一个回调函数,进程执行到db.query的时候不会等待结果返回,而是直接继续执行下面的语句,直到进入事件循环。当数据库执行结果返回的时候会将事件发送到事件队列,等到线程进入事件循环后才会调用之前的回调函数。
 
node.js的异步机制是基于事件的,所有的I/O、网络通信、数据库查询都以非阻塞的方式执行,返回结果由事件循环来处理。node.js在同一时刻只会处理一个事件,完成后立即进入事件循环检查后面事件。这样CPU和内存在同一时间集中处理一件事,同时尽量让耗时的I/O等操作并行执行。

HTML5培训技术

本文由欣才IT学院整理发布,未经许可,禁止转载。
支持35不支持0