首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Node.js低级任务不是单线程,难道被委派给其他程序吗?

众所周知,Node.js是单线程的。Node.js的大部分是用JavaScript编写的,其他部分则是用C ++编写的。

Node.js使用我们在浏览器环境中熟悉的事件循环和调用堆栈的相同概念,这意味着Node.js的JavaScript部分只能是单线程的,但是我们发现需要与操作系统对话的低级任务不是单线程的。

我们使用libuv来讲解,当Node.js将调用libuv识别为针时,它将此任务委托给libuv。在操作中,libuv的某些库需要线程,因此在执行Node.js程序时使用线程池。

默认情况下,libuv提供的Node.js线程池中有四个线程。我们可以通过process.env.UV_THREADPOOL_SIZE在脚本顶部调用来增加或减少该线程池。

看来,一旦我们调用代码创建文件,Node.js就会到达其代码的libuv部分,这将为该任务分配一个线程。libuv中的此部分在处理文件之前会获取有关磁盘的一些统计信息。

此统计检查可能需要一段时间才能完成,因此,线程将被释放以执行其他一些任务,直到完成统计检查为止。检查完成后,libuv节点将占用可用线程,或者等待直到某个线程变为可用线程为止。

我们只有四个可以调用的线程,因此有足够多的线程可以循环使用,唯一的问题是每个线程将以多快的速度处理其任务。我们注意到,进入线程池的第一个代码将首先返回其结果,并且在运行其代码时会阻塞所有其他线程,所以我们需要做的任务是处理Node.js输出与返回的时间处理。

Node.js低级任务被委派给其他程序时可以做多线程任务

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200513A0M80O00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券