gpt4 book ai didi

java - 对于不同类型的任务使用不同的线程池是否值得花费这些开销?

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

我正在设计一个类,它提供有关 Collat​​z 序列组的统计信息。我的目标之一是能够以最高效率同时处理大量包含大量术语(数百甚至数千位数字的规模)的序列。

为此,我计划对每个单独的统计数据使用最佳的数据收集技术,这意味着某些任务可以通过 ForkJoinPool 更有效地处理,而其他任务则可以通过标准缓存和固定线程来更有效地处理Executors 中提供的池。如果我走这条路,创建多个线程池或关闭一个线程池并创建另一个线程池的开销是否会比我节省的成本更多?

最佳答案

Would the overhead of creating multiple thread pools, or shutting one down and creating another, if I went that route, cost me more than I would save?

我们怎么可能告诉你这个?

关闭和重新启动线程池肯定会产生开销。如果有的话。创建线程并不便宜。

但是,我们无法量化使用不同类型的线程池可以节省多少费用。如果我们无法量化,就不可能就您的策略是否有效提供建议。

(但我认为反复关闭并重新创建线程池不是一个好主意。空闲池对性能的影响很小。)

<小时/>

这“闻起来”是过早优化的味道。 (这就像在制造发动机组之前尝试调整赛车的发动机一样!)

我的建议是(很大程度上1)从一开始就忘记性能。现在,专注于获得有效的东西。这就是我要做的:

  1. 使用最简单的策略实现代码、编写测试用例、测试/调试直至其正常工作。
  2. 选择一个或一组您要尝试解决的典型问题示例
  3. 实现一个测试工具,让您能够测量示例问题的代码性能。 (注意 Java 基准测试的标准问题...)
  4. 对您的代码进行基准测试。
    • 速度够快吗?现在就停下来。
    • 如果没有,请继续。
  5. 实现替代策略之一,并进行测试/调试。
  6. 对修改后的代码进行基准测试。
    • 速度够快吗?现在就停下来。
    • 很明显这没有帮助吗?放弃它,尝试另一种策略。
    • 你能调整一下吗?如果是这样,请尝试一下。
  7. 转至5。

此外,以这样的方式实现不同的策略可能是值得的,您可以使用命令行或配置文件设置来调整它们或在它们之间切换。

<小时/>

作为一般规则,很难先验地确定任何复杂算法或策略的执行情况。一般来说,理论……或直观……方法要考虑太多因素才能给出可靠的预测。基准测试和调整是必经之路。

<小时/>

1 - 显然,如果您知道某些技术或算法的性能会很差,并且您有一个更好的替代方案,只需付出相同的努力即可实现......做明智的事情.

关于java - 对于不同类型的任务使用不同的线程池是否值得花费这些开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46107845/

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