• 技术文章 >web前端 >前端问答

    node.js是单线程的吗

    长期闲置长期闲置2022-04-19 17:05:29原创109

    node.js默认是单线程的,因为JavaScript引擎的关系,node.js采用的是单线程异步非阻塞的模式,一个nodejs无法利用多核资源;但是可以有第三方库提供多线程的支持,只是主线程是单线程,主线程中的操作是同步阻塞的。

    本教程操作环境:windows10系统、nodejs 12.19.0版本、Dell G3电脑。

    node.js是单线程的吗

    node.js默认是单线程,node.js采用单线程异步非阻塞模式。

    node.js采用单线程异步非阻塞模式。它的单线程指的是自身Javascript运行环境的单线程,Node.js并没有给Javascript执行时创建新线程的能力,通过Libuv以及它的事件循环来实现异步。

    Node 只是主线程是单线程,主线程中的操作是同步阻塞的。但它把所有需要异步的操作扔给了IO线程池,主线程通过一定的事件轮询机制与IO线程池交互得到异步数据。

    node.js的性能不是最高的,因为javascript引擎的关系,node.js默认是单线程,一个node.js应用无法利用多核资源。

    不过有第三方库提供多线程支持,但不是无缝的。node.js是解决I/O瓶颈的(相对于传统技术,同步阻塞调用浪费线程),它并没有提高I/O速度,只是资源调度更高效。如果I/O速度不解决,node.js只能说能同时处理好多request,但每个request的响应时间还是那么长,甚至更长。

    Node 是单线程,那它是如何处理高并发请求的?

    依靠事件驱动。

    2222.png

    每个Node.js进程只有一个主线程在执行程序代码,形成一个执行栈(execution context stack)。

    主线程之外,还维护了一个"事件队列"(Event queue)。当用户的网络请求或者其它的异步操作到来时,node都会把它放到Event Queue之中,此时并不会立即执行它,代码也不会被阻塞,继续往下走,直到主线程代码执行完毕。

    主线程代码执行完毕完成后,然后通过Event Loop,也就是事件循环机制,开始到Event Queue的开头取出第一个事件,从线程池中分配一个线程去执行这个事件,接下来继续取出第二个事件,再从线程池中分配一个线程去执行,然后第三个,第四个。主线程不断的检查事件队列中是否有未执行的事件,直到事件队列中所有事件都执行完了,此后每当有新的事件加入到事件队列中,都会通知主线程按顺序取出交EventLoop处理。当有事件执行完毕后,会通知主线程,主线程执行回调,线程归还给线程池。

    主线程不断重复上面的第三步。

    NodeJs 单线程只是一个主线程,本质上的异步操作还是由线程池完成的,node将所有的阻塞操作都交给了内部的线程池去实现,本身只负责不断的往返调度,并没有进行真正的I/O操作,从而实现异步非阻塞I/O,这便是node单线程和事件驱动的精髓之处了。

    推荐学习:《nodejs视频教程

    以上就是node.js是单线程的吗的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:nodejs
    上一篇:node和react有什么区别 下一篇:es6怎么判断两个字符串是否相等
    Web大前端开发直播班

    相关文章推荐

    • nodejs怎么重启服务• 浅析利用nodejs怎么给图片添加半透明水印(方法详解)• nodejs中回调是什么意思• nodejs中I/O是什么意思• nodejs回调地狱是什么

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网