gpt4 book ai didi

arangodb - arangodb的foxx什么时候收垃圾?

转载 作者:行者123 更新时间:2023-12-01 00:15:18 25 4
gpt4 key购买 nike

我的理解是;

  • Foxx 基于 V8 引擎。
  • Foxx 是多线程的,它不与其他线程共享状态
  • Foxx 的线程一旦将响应发送给客户端,就会退出(这是正确的术语吗?)。

  • 除了 V8 Engine 的垃圾回收之外,是不是意味着 foxx 使用的任何内存在响应时都会被垃圾回收?
    如果上述问题的答案是肯定的,有没有办法禁用 V8 引擎的垃圾收集器,如果我禁用 V8 引擎的 GC,我可以期待更好的延迟吗?

    如果我弄错了,请告诉我。

    最佳答案

    与许多其他解释器相比,javascript 解释器有一个特殊的功能。它们需要针对多个浏览器窗口运行,并且一个窗口不应该知道另一个窗口。

    因此解释器操作集与其一般逻辑是严格分开的。在
    V8 这个概念是在名称 Isolate 下实现的.

    ArangoDB 产生了几个 Isolate,每个上下文都可以运行 Foxx。ArangoDB 基础设施有 Hook 到 Isolate,可以发出信号,即新集合可用。但是,在 Foxx 中没有可以使用的钩子(Hook)。

    ArangoDB 是多线程的。请求代理将读取请求,如果它发现它应该执行 Foxx-Request(而不是直接 AQL 调用),它将从池中选择一个隔离,并在该 V8 上下文中继续执行。因此,既不能保证您到达同一个工作线程,也不能保证它会在后续请求中选择相同的 Isolate。

    这些隔离区中的每一个都可以单独进行垃圾收集,而不会阻塞其他隔离区中的执行。 ArangoDB Exposes statistics about these contexts , 所以你可以看到隔离物可以被标记 dirty这意味着它们应该被垃圾收集。您可以使用 require("internal").wait(<seconds>, true)手动调用垃圾收集。产生的上下文的数量取决于您的系统拥有的 CPU 数量。但是,these settings can be configured.因此,您会看到该策略与调整 Java GC 完全不同。

    Foxx 本身会在请求后丢弃服务分配的结构。然后它们将在后续请求中不可用,并且一旦垃圾收集运行,它们的内存将返回给系统。

    通常您应该努力使您的 Foxx 服务在 AQL 周围成为一个薄层。你执行。
    虽然性能应该被视为一项功能,但您通常会在您的代码达到一定的成熟度时开始查看它。我们解释了howto create usage scenarios and measure and optimize possible throughputs in our blog post series ;虽然没有直接提到 Foxx 服务,但那里使用的策略也可以应用于 Foxx。

    关于arangodb - arangodb的foxx什么时候收垃圾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53282419/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com