事件驱动

上一节中,我们提到异步I/O;当I/O处理完毕后,nodejs是怎样知道I/O已经完成了呢?又是怎样去处理的呢?答案是:事件驱动(事件循环)机制。

事件驱动:
在nodejs中,当某个I/O执行完毕后,会以事件的形式通知执行I/O操作的线程;而线程去执行对应事件的回调函数。为了处理异步I/O,nodejs线程必须要有事件循环,不断的检查有没有事件要处理,并依次处理。

对于nodejs来说,不论是建立新的请求、提交、获取数据等,一切的行为都会触发相应的事件。在同一个时刻,只能执行一个事件的回调函数,但是在执行事件回调的途中,是可以去处理其他事件的(如有新连接),然后返回继续执行原事件函数,这样的处理机制,我们称为事件循环机制。其实在nodejs底层中,有一半的c++代码,都是在处理事件队列、回调函数。

好的,到这里我们已经学完了nodejs的3个特性!我们来做个总结
nodejs的特性有3个:单线程、non-blocking I/O(非阻塞I/O)、event-driven(事件驱动);其实这3个特性都是在说同一件事。我们可以这样理解:nodejs使用的是单线程,如果多个任务(I/O)同时过来了,某个I/O是阻塞的话,那其他任务都会在等,这样性能就不会高了;这时就要异步I/O了,所有的I/O操作都要异步;这样异步I/O就好了吗?还没完,如果正在执行A任务,这时B的I/O回调了,怎么办?这就要事件循环了,不管是新用户连接,还是老用户I/O完成,都以事件的形式加入事件循环中,等待nodejs调度。(nodejs可以想象成是一个非常非常抠门的老板,只请一个服务员做所有的事情,但工作效率比请多个人还要高)

快速学习nodejs系列:六、nodejs特性3--事件驱动相关推荐

  1. 从零开始nodejs系列文章-nodejs到底能干什么

    Node.JS 学习路线图 从零开始nodejs系列文章, 将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的 Java ...

  2. 用简易代码快速学习Python(八)

    本学习系列介绍: 本学习系列主要针对对编程略有了解或有其他语言基础并要进一步学习Python的同学,通过简易的代码快速入门掌握Python语言. 系列总目录: 用简易代码快速学习Python(一) 用 ...

  3. 七天学会NodeJS (原生NodeJS 学习资料 来自淘宝技术团队)

    NodeJS基础 什么是NodeJS JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器. ...

  4. 2013年最值得我们学习的网页作品示例【系列六】

    这是本系列的最后一篇文章了,和大家一起学习2013年里最优秀的网页设计作品.在过去的一年,网页设计领域出现了几个新的流行趋势,最热门的要数响应式设计(Responsive Design)和扁平化设计( ...

  5. nodejs系列笔记02---模块路径解析

    nodejs系列笔记02---模块路径解析 转载于:https://www.cnblogs.com/hfultrastrong/p/8036825.html

  6. 快速学习Java8新特性第七讲——Optional类

    在<快速学习Java8新特性第五讲--强大的Stream API>这一讲中,我就已经提及到了Optional类.在这一讲中,我将对其做一个更加细致的讲解. Optional类是什么? Op ...

  7. Drupal 系列一:如何快速学习 Drupal

    原文出处:http://blog.mreald.com 在给公司开发产品展示网站的时候,选择了Drupal,到现在的成品,中间走了很多曲折,也学到了很多.写一个系列,让你快速学习Drupal. 简要介 ...

  8. 基于Proteus学习单片机系列(六)——I2C总线AT24C04

    获取更多资源,请关注微信公众号:嵌入式基地 获取项目资源:公众号后台回复:单片机仿真 基于Proteus学习单片机系列(一)--点亮LED 基于Proteus学习单片机系列(二)--驱动数码管 基于P ...

  9. 黑莓开发学习入门系列,自己动手实现一个日历软件(六)

    最近有点乱糟糟,还是继续写完剩下的: 根据 黑莓开发学习入门系列,自己动手实现一个日历软件(二)实现一个黑莓应用程序最基本的结构,我们真正的可以实现日历了: 新建一个工程 calender:作为日历的 ...

最新文章

  1. matlab sae模型,matlab的Deep Learning的toolbox 中的SAE算法
  2. you do not have permission
  3. Keras官方中文文档:关于Keras模型
  4. fwoa中workflow_requestbase表currentnodetype字段含义及查看归档流程的requestid
  5. 使用AVR-GCC编程Arduino
  6. ubuntu添加windows字体
  7. 最简单DIY基于ESP8266的国产WS2812智能彩灯④(在网页用按钮点亮)
  8. Android开发屏幕适配
  9. 求职软件测试工程师英文简历,软件测试工程师英文简历范文
  10. VUE 批量导出、导入Excel
  11. Ps橡皮擦的使用说明
  12. mac 挂载 EFI 分区
  13. Learned Motion Matching-动作生成算法
  14. Week-4-作业1
  15. 5. 机器学习基石-Why can Machine Learn?
  16. 怎样阅读论文(台湾彭明辉
  17. 内蒙古师范大学计算机科学技术学院分数线,2019内蒙古师范大学录取分数线及历年专业分数线统计表【文科 理科】...
  18. 夜班媒体人援助项目在京启动,陈于冰说:“一直以来.....
  19. 【Basic Algebra】群论学习整理
  20. outlook 2007 通讯录分组导出导入

热门文章

  1. C++字符串完全指引之二 —— 字符串封装类
  2. CF932G Palindrome Partition
  3. 在循环中删除list中的元素
  4. mysql之 mysql 5.6不停机主主搭建(活跃双主基于日志点复制)
  5. 【规范】前端编码规范——jquery 规范
  6. ctime、mtime、atime
  7. Tornado 学习笔记
  8. 使用Gson 解析json
  9. rpm的使用 怎样查看rpm安装包的安装路径
  10. HADOOP2单机版