【发布时间】:2018-12-06 03:50:30
【问题描述】:
我一直在尝试深入了解异步与同步代码在 JavaScript 中的工作原理。读了几篇文章。了解调用堆栈、事件循环和函数队列的概念,以及这三者在异步代码和同步代码的情况下如何以不同的方式发挥作用。(https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoophttps://medium.com/@siddharthac6/javascript-execution-of-synchronous-and-asynchronous-codes-40f3a199e687)。
但它仍然没有消除我所有的疑虑。
- JavaScript 是单线程的,用于处理它使用的异步代码 回调函数,回调函数是被调用的函数 当一个动作完成时。我们如何知道那个动作是什么时候发生的 完全的。动作监听器是一个单独的进程还是介入 JavaScript 引擎?
如果我们的 Node JS 服务器获得 10 个并发请求 下载一个文件,我们使用异步代码来处理每个 下载请求,在这种情况下,我们将有 10 个回调函数 这将在下载完成时触发。单身 线程将每个客户端的下载将在之后开始 在完成之前为客户端下载或为所有 10 客户端收到请求后立即启动。
-
我读过的所有关于异步代码处理的文章 JavaScript 总是选择 setInterval() 的例子来区分异步和同步代码。我对 xmlhttprequest 如何异步工作更感兴趣。
- 了解 Javascript 的异步代码执行对于 Node JS 的异步代码执行也足够了吗?
谢谢。
【问题讨论】:
-
是的,NodeJs 是单线程的,但它由 C++
APIs支持,它确实为您的代码在后台创建线程。一切都取决于您如何编写代码 -
youtube.com/watch?v=zphcsoSJMvM这家伙解释得真好
-
作为单线程,每个客户端的下载将在其前面的客户端的下载完成后开始,或者对于所有 10 个客户端,它会在收到请求后立即开始 i> - 单线程只影响发生阻塞操作时代码的执行方式(例如长
for循环)。
标签: javascript node.js