事件驱动模型

在Node.js中有一个事件队列,每一个任务都会放入事件队列中,都会留下处理结果的回调函数(事件循环线程处理事件队列中的任务,直到回调函数再也不存在。);html

无阻塞的状况下,做为一个带有回调的函数被放入事件队列中,事件循环线程中被提取并执行;node

遇到I/O阻塞(读取文件、查询数据库、请求套接字、访问远程服务等)时,事件循环线程不会停下等待结果,转而继续执行队列中的下一个任务,不会在事件循环线程中执行。web

Node.Js使用事件驱动模型,当web server接收到请求,就把它关闭而后进行处理,而后去服务下一个web请求。当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。这个模型很是高效可扩展性很是强,由于webserver一直接受请求而不等待任何读写操做。(这也被称之为非阻塞式IO或者事件驱动IO)数据库

 

1,你用浏览器访问nodejs服务器上的"/about.html"浏览器

2,nodejs服务器接收到你的请求,调用一个函数从磁盘上读取这个文件。服务器

3,这段时间,nodejs webserver在服务后续的web请求。函数

4,当文件读取完毕,有一个回调函数被插入到nodejs的服务队列中。线程

5,nodejs webserver运行这个函数,实际上就是渲染(render)了about.html页面返回给你的浏览器。rest

 

http://code.danyork.com/2011/01/25/node-js-doctors-offices-and-fast-food-restaurants-understanding-event-driven-programming/code

相关文章
相关标签/搜索