Spring 批处理 corePoolSize VS 节流限制
Spring batch corePoolSize VS throttle-limit
我想知道 corePoolSize 和 throttle-limit 之间的区别,因为 Spring 定义多线程的批处理属性配置。
由于这个 post "What is the difference between corePoolSize and maxPoolSize in the Spring ThreadPoolTaskExecutor"
,我知道了 corePoolSize 和 maxPoolSize 之间的区别
但我的问题是 corePoolSize 与 throttle-limit...我发现最好定义 CorePoolSize = Throttle-limit,但我想知道......如果我定义例如:
CorePoolSize = 100 和 Throttle-limit = 200...会发生什么?将创建一个 200 大小的线程池还是 100?
感谢您的任何澄清...
核心池大小表示线程池执行程序将从 N
个线程开始。 throttle-limit T
表示,无论线程池中可用线程的数量如何,只将这些线程中的 T
用于 tasklet。
因此您可以拥有一个核心池大小为 8 的线程池和两个节流限制为 4 的小线程,在这种情况下您将使用线程池。但是如果你只有一个限制为 4 的 tasklet,你将使用一半的线程池。
throttle-limit 在 TaskExecutorRepeatTemplate.
的 spring 批处理 javadocs 中有解释
这是配置 ThreadPoolExecutor and probably simplifies the task of using a thread pool. It's certainly useful if you have parallel steps 竞争线程的所有可能方法之上的另一种 属性。
为了回答您的问题,只有当 maximumPoolSize
大于 corePoolSize
且阻塞队列时,如果您的节流限制大于 corePoolSize
,将为您的任务创建新线程在您的 ThreadPoolExecutor 中已满。否则他们将例如在您的 ThreadPoolExecutor 中排队或可能被异常拒绝(请参阅默认处理程序 AbortPolicy)。
当 spring 批处理尝试向执行器提交比它愿意接受的更多任务时会发生什么取决于您的执行器。请参阅 ThreadPoolExecutor javadocs 中的 Rejected tasks。
一开始有点令人困惑,但最后完全明白了。
请注意 DEFAULT_THROTTLE_LIMIT
是 4(在我的 spring 版本中)。
例如,当您的 ThreadPoolExecutor 意外地没有创建超过 corePoolSize 个线程时,请参阅此 gotcha。
我想知道 corePoolSize 和 throttle-limit 之间的区别,因为 Spring 定义多线程的批处理属性配置。
由于这个 post "What is the difference between corePoolSize and maxPoolSize in the Spring ThreadPoolTaskExecutor"
,我知道了 corePoolSize 和 maxPoolSize 之间的区别但我的问题是 corePoolSize 与 throttle-limit...我发现最好定义 CorePoolSize = Throttle-limit,但我想知道......如果我定义例如: CorePoolSize = 100 和 Throttle-limit = 200...会发生什么?将创建一个 200 大小的线程池还是 100?
感谢您的任何澄清...
核心池大小表示线程池执行程序将从 N
个线程开始。 throttle-limit T
表示,无论线程池中可用线程的数量如何,只将这些线程中的 T
用于 tasklet。
因此您可以拥有一个核心池大小为 8 的线程池和两个节流限制为 4 的小线程,在这种情况下您将使用线程池。但是如果你只有一个限制为 4 的 tasklet,你将使用一半的线程池。
throttle-limit 在 TaskExecutorRepeatTemplate.
的 spring 批处理 javadocs 中有解释这是配置 ThreadPoolExecutor and probably simplifies the task of using a thread pool. It's certainly useful if you have parallel steps 竞争线程的所有可能方法之上的另一种 属性。
为了回答您的问题,只有当 maximumPoolSize
大于 corePoolSize
且阻塞队列时,如果您的节流限制大于 corePoolSize
,将为您的任务创建新线程在您的 ThreadPoolExecutor 中已满。否则他们将例如在您的 ThreadPoolExecutor 中排队或可能被异常拒绝(请参阅默认处理程序 AbortPolicy)。
当 spring 批处理尝试向执行器提交比它愿意接受的更多任务时会发生什么取决于您的执行器。请参阅 ThreadPoolExecutor javadocs 中的 Rejected tasks。
一开始有点令人困惑,但最后完全明白了。
请注意 DEFAULT_THROTTLE_LIMIT
是 4(在我的 spring 版本中)。
例如,当您的 ThreadPoolExecutor 意外地没有创建超过 corePoolSize 个线程时,请参阅此 gotcha。