Nodejs Event Loop 事件循环机制
文章目录
什么是事件循环 Event loop
事件循环是 Node.js 处理非阻塞 I/O 操作的机制——尽管 JavaScript 是单线程处理的——当有可能的时候,它们会把操作转移到系统内核中去。
既然目前大多数内核都是多线程的,它们可在后台处理多种操作。
当其中的一个操作完成的时候,内核通知 Node.js 将适合的回调函数添加到 轮询 队列中等待时机执行.
工作机制是什么样的?
Client 请求到达 node api,该请求被添加到Event Queue(事件队列)[这是因为Node.js 无法同时处理多个请求]
Event Loop(事件循环) 始终检查事件队列中是否有待处理事件,如果有就从 Event Queue 中从前到后依次取出,然后处理.
因为Event Loop 是单线程非阻塞I/O,它会把请求发送给 C++ Thread Pool(线程池)去处理,底层是基于C++ Libuv 异步I/O模型结构可以支持高并发.
现在 C++ Thread Pool有大量的请求,如数据库请求,文件请求等
任何线程完成任务时,Callback(回调函数)就会被触发,并将响应发送给 Event Loop
处理完成,最终 Event Loop 会将请求返回给 Client.