Node.js 真的是单线程的吗?
许多开发者在 Node.js 编程过程中都会疑惑:Node.js 真的是单线程的吗?如果是,它是如何实现异步执行的?有些人会把它理解为事件循环,但它远不止于此。希望你既然正在阅读这篇文章,就理解什么是事件循环。如果你还没理解,可以看看Philip Roberts 的精彩演讲。
在 Chrome 中,JavaScript 在单线程中运行。您共享同一个线程进行渲染和代码执行。Chrome 实际上采用了多进程架构,这意味着浏览器中的每个标签页、插件都会获得一个新的进程。并且任何崩溃或阻塞都不会影响其他进程。当在浏览器中执行 JS 代码时,它本质上会阻塞浏览器的绘制或渲染,因为没有线程可以执行相同操作。但是在当前调用堆栈为空之后从回调队列中选择某些内容之前,浏览器绘制实际上优先。这是关于浏览器的。但是,在后端 JS 运行时 Node.js 中情况如何?
上述问题的答案是,Node.js 是单线程的,类似于 Javascript。因此,您的 JS 代码在单个线程(主线程)中运行,与事件循环和回调队列保持一致。但是,Node.js 并非纯粹的 Javascript 代码。其中一些是 C++ 代码,有些异步执行的操作(例如网络调用、文件系统任务、DNS 查找等)实际上并不由主线程处理。Node.js 对这些任务进行了内部使用 C++ 代码(可以访问多个线程)的优化,如果使用得当,这有助于减少执行时间。Node.js 实际上会将异步任务卸载到 C++ 代码中,在那里它可以使用多个线程来加快执行速度,但是如果您强制它同步(仅使用 API 的同步版本),则您就是在约束它不进行这种优化。
鏂囩珷鏉ユ簮锛�https://dev.to/santhoshrt/is-node-js-really-single-threaded-16jj