不! JavaScript 是一种单线程语言,这一点你没有听错。它是一种单线程语言,它可以访问单个主线程来执行代码。因此,当我们谈论同步编程时,我们谈论的是这个单独的线程执行所有繁重的工作并执行我们的代码。
但实际上,V8 引擎和 Node.js 使用名为 libuv 的 C 库来访问六个额外线程。其中两个用于进行垃圾收集,其余的用于执行异步编程等后台任务。
是的。当我们说代码是异步或非阻塞时,真正发生的情况是异步代码通过回调传递给这些额外的线程,并且主线程继续执行其工作而不会阻塞其余代码。
当异步代码完成时,回调函数会被推送到事件队列中,其中包含错误或所需的数据。然后事件循环将其推入调用堆栈,我们得到结果,通过一些代码来理解这一点。我们看一下fs模块的readfile方法。
fs.readFile("demo.text","utf8",(err,data)=>{ if(error){ return error } console.log("output",data); })
在上面的代码中,readfile 方法被传递到后台线程。读取发生在后台,当读取完成时,回调将被推送到带有错误或数据的事件队列中。
一旦进入调用堆栈,回调就会被执行,我们要么留下错误,要么将数据作为输出。
感谢您的阅读,我希望我能够解释 Javascript 中的单线程方法。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3