gpt4 book ai didi

java - Thread.sleep() VS Executor.scheduleWithFixedDelay()

转载 作者:IT老高 更新时间:2023-10-28 20:29:48 24 4
gpt4 key购买 nike

目标:每隔一段时间执行某些代码。

问题:在性能方面,是否存在显着差异:

while(true) {
execute();
Thread.sleep(10 * 1000);
}

executor.scheduleWithFixedDelay(runnableWithoutSleep, 0, 10, TimeUnit.SECONDS);

?

当然,后一种选择更洁净。然而,我想知道我是否应该开始一次名为“花几天时间重构遗留代码来告别 Thread.sleep()”的冒险。

更新:此代码运行在超/兆/超高负载环境中。

最佳答案

您正在处理以数十秒为单位的 sleep 时间。通过在此处更改 sleep 选项可能会节省纳秒或微秒。

我每次都更喜欢后一种风格,但如果你有前一种,而且要花很多钱来改变它,“提高性能”就不是一个特别好的理由。

编辑回复:8000 个线程

8000 个线程非常多;我可能会转移到预定的执行程序,以便您可以控制系统上的负载量。您关于改变唤醒时间的观点是需要注意的,尽管我认为更大的风险是所有线程都在 hibernate 然后连续醒来并竞争所有系统资源的踩踏事件。

我会花时间把这些都扔到一个固定的线程池调度执行器中。只有尽可能多的同时运行,因为您可以使用最有限的资源(例如,# cores 或 # IO 路径)加上一些来处理任何问题。这将以延迟为代价为您提供良好的吞吐量。

使用 Thread.sleep() 方法将很难控制正在发生的事情,并且您可能会损失吞吐量延迟。

如果您需要更详细的建议,您可能需要更详细地描述您想要做什么。

关于java - Thread.sleep() VS Executor.scheduleWithFixedDelay(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13422125/

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