【发布时间】:2014-11-15 12:07:35
【问题描述】:
这个问题是关于 JavaScript 的单线程模型的。我知道javascript本质上是非阻塞的,因为它能够向异步事件队列添加回调。但是如果回调函数确实需要很长时间才能完成,那么 JavaScript 会不会因为它是单线程的而在这段时间内阻塞其他所有内容? nodejs如何处理这样的问题?而对于前端的开发者来说,这是一个无法回避的问题吗?我问这个问题是因为我读过它通常是保持功能任务尽可能小的好习惯。真的是因为javascript中的长任务实际上会阻塞其他任务吗?
【问题讨论】:
-
这是相当广泛的;你的代码会做什么这么耗时?
-
“我知道 javascript 本质上是非阻塞的” - 不,它不是。这是一些 node.js 的 API 函数的设计特征。 JavaScript 本身在每个函数调用期间都会阻塞。
-
它不会倾向于冻结浏览器,它确实冻结浏览器。每个 JavaScript 函数调用都会这样做。它们中的大多数都发生得太快以至于你无法注意到,所以在你做一些耗时的事情之前这不是问题。
-
不,阻塞是 any 单线程环境的限制。答案很简单:Node 不是单线程的。
-
此外,节点将耗时的任务卸载到底层操作系统,为涉及等待的操作提供异步功能,如网络和磁盘 IO。
标签: javascript node.js single-threaded