如何产生当前的CPU时间片

问题描述 投票:0回答:1

我有一个包含必要的无限循环的Java程序。显然,仅按原样保留循环会导致程序使用调度程序分配给它的最大时间,因此当该时间无法进行更多计算时,我想产生当前时间片。

我已经尝试过Thread.yield()Thread.onSpinWait()(尽管我不确定这是否确实按照我的想法做了)和Thread.sleep(0)。全部要么99%的时间被忽略,要么就是不工作。

似乎有效的一件事是Thread.sleep(x),它将我的CPU使用率从〜100%降低到〜2%。但是,睡一段时间后,对我来说似乎是个坏主意。我目前正在编写合成器,因此需要尽快恢复时间,以便重新填充音频缓冲区。

我不能简单地增加音频缓冲区的大小,因为这样做很快会引入非常明显的延迟。

[音频缓冲区已经飙升至每20个左右的“写入周期”就达到80%的空,我担心增加睡眠可能需要太大的音频缓冲区,以免在较弱的系统上出现伪像。

有什么办法可以持续产生我当前的时间片吗?

java scheduling
1个回答
0
投票

您可以利用waitnotify来控制并发。

由于您的线程共享一个共享资源来交换数据,因此在所述对象上调用wait将暂停您的Consumer线程,直到Producer通知它为止,因此避免了忙碌的旋转。

阅读材料:

© www.soinside.com 2019 - 2024. All rights reserved.