NodeJS实现高并发的原理
1.Nodejs的诞生
为了解决web服务器的高并发性能问题
2.单线程的好处
业务1的计算1刚调用完,在调用I/O请求时马上调用业务2的计算1,CPU的利用率永远百分百,不在创建销毁线程,缺点:一个用户线程崩溃,其他人整个服务崩溃
3.非阻塞I/O机制
传统的单线程,I/O阻塞代码执行,但nodejs使用非阻塞I/O使得线程永远在执行计算操作,cpu利用率永远是100%
4.事件驱动模型
应用层:即node.js的模块,如fs,http等
v8引擎层: 解析JavaScript;
Libuv:实现nodejs异步的核心,实现了线程池,事件循环,文件操作等
在Libuv层的Event Loop事件循环不断读Event Queue中的事件,在读取事件的过程中如果遇到非阻塞事件,会自已处理,并且在处理完后调用回调函数向上一层返回结果;对于阻塞事件,会委托给后台线程池来处理,当这些阻塞操作完成后,执行结果与提供的回调函数一起再被放入事件队列中。当Event Loop再次读到这个事件时,会再次执行被放到队列中的事件回调函数,最后将结果返回给上一层。具体流程可以参考下图: