Как вывести текущий отрезок времени процессора - PullRequest
1 голос
/ 25 января 2020

У меня есть java программа, содержащая необходимый бесконечный l oop. Очевидно, что простое оставление l oop как есть приводит к тому, что программа использует максимальное время, данное ему планировщиком, поэтому я хотел бы получить текущий временной интервал, когда больше вычислений для этого времени не может быть выполнено.

Я уже пробовал Thread.yield(), Thread.onSpinWait() (хотя я не уверен, что это на самом деле делает то, что я думаю, что я), и Thread.sleep(0). Все они либо игнорируются в 99% случаев, либо просто не работают.

Единственное, что действительно работает, это Thread.sleep(x), что снижает использование процессора с ~ 100% до ~ 2%. Тем не менее, спать в течение определенного времени кажется мне плохой идеей. В данный момент я пишу синтезатор, и поэтому мне нужно как можно скорее откатить время, чтобы снова заполнить аудио буфер.

Я не могу просто увеличить размер аудио буфера, так как это происходит быстро вводит чрезвычайно заметные задержки системы.

Есть ли способ последовательно выдавать мой текущий временной интервал?

1 Ответ

4 голосов
/ 25 января 2020

Вы можете использовать wait & notify для управления параллелизмом.

Поскольку ваши потоки совместно используют общий ресурс для обмена данными, вызов wait для указанного объекта приостановит ваш поток потребителя до источника уведомляет об этом, поэтому избегает занятое вращение.

Материал для чтения:

...