不! 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 中的单线程方法。
以上是JavaScript 不是单线程的!!的详细内容。更多信息请关注PHP中文网其他相关文章!