【发布时间】:2011-12-11 16:03:53
【问题描述】:
对于连续任务,例如渲染动画,每帧创建短命线程会比在开始时创建线程然后暂停并恢复慢很多吗?
或者差异可以忽略不计?
【问题讨论】:
-
不知道是不是语言的问题,但不能说会不会是瓶颈。如果您有一个非常慢的系统,这可能无关紧要,如果它是一个非常快的系统(或框架等),那么几个选项中最快的选项可能仍然是瓶颈?
标签: java multithreading performance
对于连续任务,例如渲染动画,每帧创建短命线程会比在开始时创建线程然后暂停并恢复慢很多吗?
或者差异可以忽略不计?
【问题讨论】:
标签: java multithreading performance
那会慢很多;线程的开销很大。
您可以使用线程池来重用线程并避免开销。
但是,可能仍然不值得将线程用于此类短期任务,因为上下文切换的成本将超过收益。
测量一下!
【讨论】:
创建新线程的开销很大。如果线程的活动非常短,则创建开销甚至可能大于实际执行时间。您将需要尽可能多地回收线程。
我推荐使用ExecutorService。
【讨论】:
由于创建开销,创建新线程并不是最好的方法。您至少应该使用线程池,而不是创建新线程(有关详细信息,请参阅Executor)。
线程的生命周期也很重要。如果它太短,由于上下文切换开销,性能可能会更差。
另一个重要的点是您拥有的 CPU/核心数。作为一般规则,如果您的任务是 CPU 密集型的(我假设这是您的情况),则每个内核应该使用 1-2 个线程。如果您的任务是 I/O 密集型任务,您可以稍微推动这个数字(比如 3-5 个线程)。
【讨论】: