JVM可以处理多少ScheduledExecutionService,每个服务有一个线程



我创建了一个代表用户会话的类,该用户会话每25秒向另一个服务发送一次ping。为此,我在该类中使用了ScheduledExecutorServiceScheduledFuture

public class UserSession {

private ScheduledExecutorService scheduledExecutorService;
private ScheduledFuture<?> keepAliveTask;

public UserSession() {
this.scheduledExecutorService = Executors.newScheduledThreadPool(1);
this.keepAliveTask = scheduledExecutorService.scheduleAtFixedRate(() -> {         
this.sendPing();
}, 25L, 25L, TimeUnit.SECONDS);
}
.....
.....
}

现在的问题是,大约会有4000-5000个用户会话,因此会有40005000个UserSession对象,每个对象都有自己的ScheduledExecutorService和单线程。因此,如果我正确理解这一点,将有大约4000-5000个线程,每个线程负责发送各自会话的ping。

那么,JVM会处理那么多线程或ScheduledExecutorService吗?我知道这取决于CPU,但这是个好主意吗?或者还有更好的选择吗?

JVM将线程委托给底层操作系统。

因此,如果操作系统和硬件(主要是处理器及其核心(能够在一个进程中支持那么多线程,那么您的问题就更令人担忧了。

这是个好主意吗?或者还有更好的选择吗?

我不知道你项目的界限。实现目标的其他想法:

  • Quartz和消息队列应用程序,例如ActiveMQ、RabbitMQ,甚至Apache Kafka
  • 像Akka这样的演员模型系统,包含演员和调度器

相关内容

最新更新