gpt4 book ai didi

java - ThreadPoolExecutor参数配置

转载 作者:行者123 更新时间:2023-12-01 22:53:42 25 4
gpt4 key购买 nike

我正在使用需要从 Rest API 请求数据的客户端应用程序。其中许多请求是独立的,因此可以异步调用它们。我使用 ThreadPoolExecutor 来执行此操作,并且我发现它可以配置多个参数:

  • 核心池大小
  • 最大池大小
  • 队列容量

我读到this article我了解以下内容:

  • corePoolSize 是执行程序添加新线程而不是将其排队的值,低于该值
  • maxPoolSize 是执行程序将请求排队的值以上
  • 如果实际线程数在 corePoolSize 和 maxPoolSize 之间,则请求将排队。

但我有一些问题:

  • 我一直在测试,corePoolSize 越高,得到的结果就越好。在有大量客户端向该 Rest API 发出请求的生产环境中(每天可能有数百万客户端),corePoolSize 应该有多高?
  • 我应该如何操作才能获得“最佳”参数?仅通过测试?
  • (每个参数的)值过高/过低可能会导致哪些问题?

提前谢谢

更新

我当前的值(value)观是:

  • 核心池大小 = 5
  • 最大池大小 = 20
  • 队列容量 = 100

最佳答案

  • corePoolSize是要保留在池中的线​​程数,即使它们处于空闲状态,除非设置了 {@code allowedCoreThreadTimeOut}
  • maximumPoolSize池中允许的最大线程数

corePoolSize 是您想要永远等待的线程数,即使没有人请求它们。 maximumPoolSize是您将启动的最大线程数以及对 Rest API 的并发请求数。

  • 每秒有多少个请求? (每秒平均/最大)。
  • 一个请求需要多长时间?
  • 用户可接受的最长等待时间是多长?

corePoolSize >= requests per second * seconds per request

maximumPoolSize >= maximum requests per second * seconds per request

queueCapacity <= maximumPoolSize * maxWaitTime / timePerRequest (您应该对此进行监控,以便知道何时必须采取行动。)

您必须记住,Rest API 或您自己的应用程序/服务器/带宽可能会对并发连接数量施加一些限制,并且许多并发请求可能会增加每个请求的时间。

我宁愿保留corePoolSize低,keepAliveTime相当高。

您必须记住,每个线程都会为并行 HTTP 请求增加相当多的开销,应该有一个 NIO 变体可以在没有大量线程的情况下完成此操作。也许你可以尝试Apache MINA

关于java - ThreadPoolExecutor参数配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24390882/

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