Node.js应用程序在一个单线程的事件驱动模型中运行。
比较事件回调和线程模型
在传统的线程网络模型中,请求进入一个Web服务器,并呗分配给一个可用的线程。对于该请求的处理工作继续在该线程上进行,直到请求完成并发出响应。
现在思考Node.js事件模型的工作原理,Node.js不是在各个线程为每个请求执行的工作。反之,它把工作添加到一个事件队列中,然后有一个单独的线程运行一个事件循环把这个工作提取出来。事件循环抓取事件队列最上面的条目,执行他,然后抓取下一个条目。当知行长期运行或有阻塞I/O的代码时,它不是直接调用该函数,而是吧函数随同一个要在此函数完成后执行的回调一起添加到事件队列。当Node.js事件队列中所有的事件都被知行完成时,Node.js应用程序终止
在Node.js中阻塞I/O
阻塞I/O的一些情况
- 读取文件
- 查询数据库
- 请求套接字
- 访问远程服务
在被阻塞的线程上执行的函数依然可以吧事件添加到要处理的事件队列中。
在Node.js事件模型中,工作作为一个带有回调函数呗添加到事件队列中,然后再事件循环线程中被提取出。之后在无阻塞的情况下,在事件循环线程上执行该函数;或在阻塞的情况下,在一个单独的线程上执行它.
企业级独立部署应用:知行办公http://zx.naton.cn
【总监】十二春秋之,3483099@qq.com;
【Master】zelo,616701261@qq.com;
【运营】运维艄公,897221533@qq.com;
【产品设计】流浪猫,364994559@qq.com;
【体验设计】兜兜,2435632247@qq.com;
【iOS】淘码小工,492395860@qq.com;iMcG33K,imcg33k@gmail.com;
【Android】人猿居士,1059604515@qq.com;思路的顿悟,1217022114@qq.com;
【java】首席工程师MR_W,feixue300@qq.com;
【测试】土镜问道,847071279@qq.com;
【数据】fox009521,42151960@qq.com;
【安全】保密,你懂的。