gpt4 book ai didi

Java 多线程 - 6 个线程还是 30 个线程?

转载 作者:行者123 更新时间:2023-12-01 17:20:21 25 4
gpt4 key购买 nike

我正在开发一个多线程应用程序,需要执行一些光学字符识别。该应用程序的要求是它必须运行得非常非常快。

有一次,我必须同时阅读 6 个不同的单词。所以我正在做的是,启动 6 个线程,其中一个线程专门用于读取每个单词。

但是,我想知道是否应该更进一步,为单词中的每个字符启动一个线程。例如,如果我有 6 个单词,每个单词大约有 5-6 个字符,这将意味着 30-36 个线程(对于较长的单词可能最多 50-70 个线程)。

处理每个单独的字符似乎需要 10-30 毫秒,每个单词总共需要 200-300 毫秒。 (我需要将每个单词的时间减少到 100 毫秒或更短)。

哪种策略实际上会给我带来更好的性能?每个单词一个线程,还是每个字符一个线程?

最佳答案

Which strategy will actually give me better performance? One thread per word, or one thread per character?

答案很大程度上取决于您的硬件架构和实际进行的处理。您的处理是否完全受CPU限制,或者是否有任何日志记录或其他IO?回答这个问题的最佳方法是进行性能运行,尝试各种不同的线程设置,并进行多次试验,看看哪一个效果更好。为了获得最准确的结果,您的测试运行时间应该长于几秒,以排除 JIT 和其他 Java 初始化的情况。

其他一些想法:

  • 正如@Sotirios 和其他人所提到的,由于上下文切换开销,仅仅在问题上投入更多线程实际上可能会使其运行速度变慢。

  • 您应该使用 ExecutorService 线程池,这样您就不会每次都 fork 和收获线程。线程的启动/关闭并不是一个无关紧要的过程。

关于Java 多线程 - 6 个线程还是 30 个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19226234/

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