Nodejs的运行原理-调用篇

之前做过Nodejs的架构篇, 有很多朋友留言给我,说没看懂里面的例子,这里我会重新梳理一下,再以http server为例,来解析Nodejs从前端到libuv的调用过程。

正文

 

Nodejs的运行原理-调用篇

回忆a. Nodejs提供了许多功能接口(又称标准库),例如:http,net,socket etc

回忆b. 这些库是由C/C++写成,并且对外提供服务

回忆c. libuv负责异步调用工作(event loop)

Nodejs的运行原理-调用篇

这是上一篇我们使用过得流程图,从V8角度出发,描述了建立http server,js 到C/C++的过程,同时也包括了调用后端的参与者(tcpwrap,libuv)。图中1,2,3,4,5这些步骤是一个同步调用的过程,始于server.listen(),终于第5步,也就是server.listen()之后。

server.listen()发起的请求不一定会被处理完,V8会继续执行js代码。

当server.listen()发起的请求被处理完之后,libuv发起一个逆向的callback,始于libuv中的event loop,终于server中设置的callback函数,而这期间,V8可能已经完成了多条任务(小心回调地狱),这就是异步的优势所在。

PS:高并发不等同于高效率,我们以Nodejs的食堂为例,窗口阿姨调度得当,他很快地将饭菜分给学生,这不代表学生能够马上吃到饭,因为学生要慢慢地找到空闲的位置才能开始吃饭。(这里稍微吐槽下,Nodejs的运算速度比PHP5还要慢,不适合做逻辑复杂的项目)

一个简单的http server 例子:

var http=require("http"); http.createServer(function(req,res){ res.writeHead(200,{ "content-type":"text/plain" }); res.write("hello nodejs"); res.end(); }).listen(3000);

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgyys.html