js中的事件循环与node.js中的事件循环有什么不同,提示:libuv
- 事件循环相同
- node支持setImmediate
- Node.js 独有的 process.nextTick 优先级最高:
追问:
底层原理追问
libuv 架构细节:libuv 的线程池是如何工作的?哪些操作会用到线程池? 答:文件 I/O、DNS 查询、CPU 密集型任务,默认 4 个线程
事件循环阻塞:什么情况下会阻塞 Node.js 事件循环?如何检测和避免? 答:同步阻塞操作、CPU 密集型计算,使用 --prof、clinic.js 等工具
微任务队列爆栈:如果微任务不断产生新的微任务会怎样? 答:造成事件循环饥饿,宏任务永远无法执行
跨环境兼容性:如何写出在浏览器和 Node.js 都能正确运行的异步代码? 答:避免依赖执行顺序,使用 Promise 链或 async/await
事件循环监控:在生产环境如何监控事件循环的健康状态? 答:使用 process.hrtime、perf_hooks 监控 lag
批处理优化:如何利用事件循环的特性进行性能优化? 答:合并 DOM 操作、批处理数据库查询
源码级理解
V8 与 libuv 协作:V8 引擎和 libuv 是如何协作实现事件循环的? 考察:对 Node.js 架构的深度理解
自定义事件循环:如果要实现一个简化的事件循环,核心组件有哪些? 考察:系统设计能力和原理理解深度 这些差异直接影响代码的执行顺序和性能表现,是 Node.js 开发者必须深刻理解的核心概念。在实际开发中,错误理解这些差异往往导致难以调试的竞态条件和性能问题。