首页 > 解决方案 > vert.x - 可能有多少个 Timer

问题描述

使用 vert.x,我可以创建多少个计时器(主要是一次性)而不考虑性能降低、内存问题等?有一些限制吗?

创建这些计时器的场景不是人为的,我不想一次循环并创建几千个计时器,而是在现实世界的场景中,随着时间的推移,计时器可能会连续创建,一次几个或一个一个小时内很少有 10 次,或者一天中有 100 次左右,但可能会发生,总共有几千个创建并等待运行。

如果同时执行或几乎同时运行数百个,会发生什么?vert.x 如何处理这样的负载?

干杯

标签: javavert.x

解决方案


简短的回答:即使您设置了数百万个定期计时器,也不会发生任何事情。

您可以自己尝试一下:

    Vertx vertx = Vertx.vertx();
    AtomicLong counter = new AtomicLong(0);

    for (int i = 0; i < 1_000_000; i++) {
        vertx.setPeriodic(1, (l) -> {
            if (counter.incrementAndGet() % 1_000_000 == 0) {
                System.out.print(".");
            }
        });
    }
    System.out.println("Done deploying");

在这里你可以看到我创建了 1M 定时器,每个定时器每毫秒递增一个计数器。这将使您的 CPU 达到峰值,并消耗大量内存,但它会起作用。

我们正在谈论主动运行的计时器。您的睡眠计时器将消耗的唯一资源是内存(因为它们是几个对象,它们是一个数据结构)。只要您不耗尽内存(并且您需要成千上万的内存才能做到这一点),您应该没问题。

如果你真的很好奇 Vert.x 中的定时器是如何工作的,你可以从这里开始:https ://github.com/eclipse/vert.x/blob/master/src/main/java/io/vertx/核心/impl/VertxImpl.java#L372


推荐阅读