gpt4 book ai didi

java - 使用 ExecutorService 时如何避免 "cannot create native threads"?

转载 作者:行者123 更新时间:2023-12-02 00:17:26 26 4
gpt4 key购买 nike

我是 ExecutorService 的新手。现在我的场景是“百万数据365*24*7进来”我需要对使用线程传入的数据进行一些处理。

ExecutorService es = Executors.newSingleThread();
es.execute(new ComputeDTask(data));

我正在向 ComputeDTask 发送数据以进行某些执行。

每次数据传入时创建一个新的ComputeDTask效率如何?也就是说,如果数据被接收一百万次,那么就会创建一百万个ComputeDTask对象。

最佳答案

创建线程的开销约为100微秒。也就是说,如果您执行的工作少于 100 微秒,您的开销将超过已完成的工作,并且您的程序可能会比单线程程序慢。

为现有 Executor 服务创建任务的开销约为 2 微秒。也就是说,如果任务花费的时间少于 2 微秒,您可能会比实际完成的工作有更多的开销。

如果您有 CPU 密集型进程,则需要与核心数量大致相同的线程,以保持所有核心繁忙,同时最大限度地减少开销。

例如如果您有 8 个核心,我建议您将完成的工作合并起来,这样您就有 8 个线程,每个线程总共有一个任务。您可以有比这更多的任务,但您可能会发现处理时间更长。

当然,您应该在完成后关闭 ExecutorService。您没有在所有示例中看到这样做的原因是,创建一个在应用程序生命周期中使用的 ExecutorService 可能是一个好主意。

关于java - 使用 ExecutorService 时如何避免 "cannot create native threads"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11647190/

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