【问题标题】:Understanding Nodejs threading了解 Nodejs 线程
【发布时间】:2014-07-24 10:34:36
【问题描述】:

前段时间我开始学习 nodejs,很酷的一点是,无论开发人员编写什么,都可以在单个线程上运行。
但是当我做一个非阻塞的文件 I/O 或网络 I/O 时,一些线程必须等待响应,这是由底层 V8 架构完成的。
我们说 nodejs 进程在单核上运行,因为只允许 1 个线程,我们需要多个线程,然后 CPU 才能将它们调度到不同的核。
但是当我们说nodejs进程运行在单核上时,是不是意味着底层的V8 javascript引擎也运行在单核上呢?所有节点进程都使用相同的 V8 js 引擎实例,还是像对每个进程的单独支持一样?

之所以想到这些问题,是因为我想为 nodejs 进程创建集群,并且我想知道我是否可以在 n 核心机器上创建 n 集群,或者我是否应该将大量核心留给V8 引擎?

编辑:找到了一个链接,给出了一些答案http://blog.carbonfive.com/2014/02/28/taking-advantage-of-multi-processor-environments-in-node-js/
“这些子节点仍然是V8 的全新实例。假设每个新节点至少需要 30 毫秒的启动时间和 10 mb 内存。也就是说,您不能创建成千上万个。”

【问题讨论】:

    标签: multithreading node.js nonblocking


    【解决方案1】:

    将您的问题移至讨论论坛,因为这里不适合“讨论/分享”想法。

    我找不到答案 - 是否使用了 V8 的单个实例。 [你的好问题]

    以下cmets是根据我的理解:

    Thumb 规则是,如果您有多个核心,则使用集群并允许节点生成多个进程[每个核心一个]。进程间通信将由事件机器本身负责。所以我认为 V8 实例会被共享。

    继续,使用 node-redis-cluster,它将帮助您在节点进程之间通过 redis 共享数据。

    集群是节点的战马。干杯。

    【讨论】:

    • '允许节点产生多个进程[每个核心一个]' 我们如何知道每个进程将转到一个单独的核心?这不就是操作系统线程调度器的任务,没人能控制吗?
    • 是的,你是对的,理论上是——它是“叉子”。所有工作进程都绑定到一个主(创建者),以便它们可以交换服务器句柄。尝试使用图形工具“HTOP”,以便您了解内核的使用方式。很棒的节点。
    【解决方案2】:

    但是当我们说 nodejs 进程在单核上运行时,是不是 意味着底层的 V8 javascript 引擎也在一个 单核?所有节点进程使用相同的 V8 js 引擎实例 还是像对每个流程的单独支持?

    Nodejs 使用 V8 引擎进行处理。而且 V8 引擎在设计上是单线程的。

    如果我可以在 n 个核心机器上创建 n 个集群,或者我应该留下一个 为 V8 引擎提供大量内核?

    我认为您应该使用整个可用的机器内核。然而,这一切都是你的选择。如果你不想让node使用整个机器核心,那么设置将要使用的核心数量。

    【讨论】:

    • V8 是单线程的?怎么可能是单线程的?谁将创建线程谁将等待节点进程启动的异步操作?
    • who 是什么意思?这只是关于Javascript。而且 Javascript 在设计上是单线程的。
    • V8 是用 C++ 编写的。异步函数是异步的,因为其他东西正在同步等待响应。我是这么理解的。
    • 尽管 V8 是用 C++ 编写的,但它是在 ECMAScript standard 之后的 Javascript Engine。此外,multithreadingasynchronous 也不相同。你可以看看这个问题来弄清楚。 stackoverflow.com/questions/600795/…
    • 我阅读了讨论,他们似乎表明我是对的。某些线程或进程将等待任务完成。它可能没有使用 CPU,但它会等待。如果 V8 是单线程的,那么其他一切都将不得不停止。但既然这不是真的,我希望 V8 根本不是单线程的。
    猜你喜欢
    • 2013-07-24
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 2012-10-07
    • 1970-01-01
    相关资源
    最近更新 更多