快速掌握Node.js事件驱动模型
作者:bea
一、传统线程网络模型
在了解Node.js事件驱动模型之前,我们先了解一下传统的线程网络模型,请求进入web服务器(IIS、Apache)之后,会在线程池中分配一个线程来线性同步完成请求处理,直到请求处理完成并发出响应,结束之后线程池回收。
这就会就会带来以下几个问题 :
1.由于线程池中线程个数有限,对于频繁请求时,就会出现等待,严重的甚至会把服务器挂掉
2.对于高并发的时候,为了防止出现脏数据就会使用锁来解决,一些I/O事务可能消耗很长得时间,这样就会出现一些线程等待,效率低下
二、事件驱动模型
1.在Node.js中有一个事件队列,每个任务都会放入事件队列中,都会留下处理结果的回调函数,事件循环线程(个人感觉有点类似ios中的RunLoop)处理事件队列中的任务,直到回调函数不再存在。
2. 在无阻塞的情况下,作为一个带有回调的函数被放入事件队列中,事件循环线程中被提取并执行。
3.当执行过程中遇到I/O阻塞(读取文件、查询数据库、请求套接字、访问远程服务等)时,事件循环线程不会停下等待结果,转而继续执行队列中的下一个任务,不会在事件循环线程中执行。在函数执行时,Node.js在事件队列中放置回调函数,它的顺序根据函数的完成快慢决定。
4.在1中也说了当遇到I/O阻塞,循环线程不会等待结果,转而执行队列中的下一个任务,那是该由谁来执行这个I/O操作呢?
Node.js使用事件回调来避免对阻塞I/O的等待,在后台实现线程池,当遇到I/O阻塞任务时,会从线程池中获取一个线程,将该函数及回调在那里执行,在被阻塞的线程上执行的回调函数仍然可以把事件添加到事件队列中。
以上就是关于Node.js事件驱动模型的全部内容,希望对大家的学习有所帮助。
猜你喜欢
您可能感兴趣的文章:
- javascript仿京东导航左侧分类导航下拉菜单效果
- JS中多种方式创建对象详解
- 基于jquery实现无限级树形菜单
- javascript的几种继承方法介绍
- 基于javascript实现文字无缝滚动效果
- ajax在兼容模式下失效的快速解决方法
- jquery仿QQ登录账号选择下拉框效果
- 详述JavaScript实现继承的几种方式(推荐)
- jQuery toggle 代替方法
- 一款简单的jQuery图片标注效果附源码下载
- 酷炫jQuery全屏3D焦点图动画效果
- 浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
- 使用struts2+Ajax+jquery验证用户名是否已被注册
- 使用getBoundingClientRect方法实现简洁的sticky组件的方法
- Node.js文件操作方法汇总
- 浅谈Sticky组件的改进实现
- 使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
- 关于JS中match() 和 exec() 返回值和属性的测试
- 快速掌握Node.js中setTimeout和setInterval的使用方法