Я строю монитор в Котлине для планирования определенных операций. Мне нужна программа, которая вставляет или обновляет некоторые записи в базе данных в течение заданного промежутка времени.То, что я получил до сих пор, - это программа, которая выполняется в течение определенного промежутка времени, но в моей программе есть бесконечный цикл, который потребляет до 30% мощности процессора, когда не время для обновления.Итак, мой вопрос, как построить монитор без бесконечного цикла?
это мой код:
while(!operations.done && appConfigurations.run_with_monitor) {
if (DataSourceMonitor.isReadyForUpdate(lastMonitorModel)) {
operations.update()
}
}
- это целая последовательность различных действий, которые нужно выполнить.Каждая операция, реализующая интерфейс IScheduler.
interface IScheduler {
var done: Boolean
fun update()
fun reset()
}
Пример реализации:
class Repeat(private val task: IScheduler) : IScheduler {
override var done = false
override fun update() {
if (this.task.done) {
this.reset()
}
this.task.update()
//logger.info { "Update repeat, done is always $done" }
}
override fun reset() {
this.task.reset()
this.done = false
}
}
class Sequence(private val task1: IScheduler, private val task2: IScheduler): IScheduler {
override var done = false
var current = task1
var next = task2
override fun update() {
if (!this.done) {
this.current.update()
if (this.current.done) {
this.current = this.next
}
if (this.next.done) {
this.done = true
}
}
}
class Print(private val msg: String): IScheduler {
override var done = false
override fun update() {
println(this.msg)
this.done = true
}
override fun reset() {
this.done = false
}
}
Значение операции может быть какследует:
val operations = Repeat(Sequence(Print("First action"), Print("Another action")))
** Итак, сейчас мой монитор работает и полностью функционирует, но как я могу улучшить производительность бесконечного цикла?**
Надеюсь, у кого-нибудь есть идеи по этому поводу.