代码之家  ›  专栏  ›  技术社区  ›  sbmthakur

为什么节点会产生多个线程?

  •  1
  • sbmthakur  · 技术社区  · 8 年前

    我列出了节点服务器的线程,下面是对stdout的响应:

    $ ps -e -T | grep 14209
    14209 14209 ?        00:10:08 node
    14209 14415 ?        00:00:00 V8 WorkerThread
    14209 14416 ?        00:00:00 V8 WorkerThread
    14209 14417 ?        00:00:00 V8 WorkerThread
    14209 14418 ?        00:00:00 V8 WorkerThread
    14209 14419 ?        00:00:00 node
    14209 15894 ?        00:00:00 node
    14209 15895 ?        00:00:00 node
    14209 15896 ?        00:00:00 node
    14209 15902 ?        00:00:00 node
    

    我了解到nodejs是单线程的,同一个线程负责处理javascript代码。那么,最后五个线程的目的是什么?它们是由 libuv

    1 回复  |  直到 8 年前
        1
  •  1
  •   skypjack    8 年前

    那么,最后五个线程的目的是什么?它们是由处理异步I/O的libuvh生成的吗?

    至少其中一些(如果不是全部)是由于 libuv
    documentation )主要用于fs请求,即使不仅仅用于:

    libuv提供了一个线程池,可用于运行用户代码并在循环线程中获得通知。该线程池在内部用于运行所有文件系统操作,以及getaddrinfo和getnameinfo请求。

    这是因为像fs请求这样的事情本质上是同步的,使它们看起来是异步的唯一方法是在单独的线程上生成请求,然后在主线程上处理响应。

    v8 紫外线 )不要在内部使用线程。只要用户觉得JavaScript运行时是单线程的,就没有理由不使用线程。
    实际上,这些库在某种程度上正是为了执行任务和提高性能而做的:它们生成线程并在内部使用。