java - vert.x - 可能有多少个 Timer
问题描述
使用 vert.x,我可以创建多少个计时器(主要是一次性)而不考虑性能降低、内存问题等?有一些限制吗?
创建这些计时器的场景不是人为的,我不想一次循环并创建几千个计时器,而是在现实世界的场景中,随着时间的推移,计时器可能会连续创建,一次几个或一个一个小时内很少有 10 次,或者一天中有 100 次左右,但可能会发生,总共有几千个创建并等待运行。
如果同时执行或几乎同时运行数百个,会发生什么?vert.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
推荐阅读
- lua - 我无法在 Lua 上为 ESP8266 订阅 MQTT 代理
- c# - 使用类或结构将回调从 C++/CLI 发送到 C#?
- ruby - 重载 Kernel.require() 而不制动它
- node.js - 为什么在 reahing ejs 文件中传递给 locals 对象的变量变得未定义?
- c# - Xamarin Forms 中的 Rest 客户端无法连接到 localhost
- nestjs - NestJS - 在监视模式下排除文件夹
- c++ - Z3如何将expr转换为SMT?
- c# - 从 c# 到 html 显示两个具有相同下拉菜单的图像
- javascript - 如何为每个列表创建删除按钮并为订单列表添加编号系统
- angular - 无法准备好未定义的自定义组件的属性