В настоящее время я разрабатываю свое управляемое событиями программное обеспечение Java следующим образом (это суть моего основного метода):
while(true) {
Event event = eventListener.poll();
if(event != null) {
// do something
} else {
// do nothing as usual, but burn CPU time.
}
}
В зависимости от того, что я создаю, eventListener
может быть чем-тоон прослушивает внешний веб-сокет, опрашивает канал Redis на наличие обновлений или ожидает сообщения от другого процесса, сидящего в том же окне (возможно, через UDP / TCP / shm).
Я думаю, что этот занятый циклПодход тратит много процессорного времени, когда eventListener
возвращает ноль (что происходит большую часть времени), так как он просто вращается. Тем не менее, я не знаю, как еще подойти к этой схеме, кроме добавления Thread.sleep
каждой итерации, которая не является хорошим решением.
В идеале я хотел бы иметь метод:
void run(Event event) {
// do something
}
, где run
вызывается каждый раз, когда событие достигает eventListener
. Если такого события нет, то в идеале процесс должен просто сидеть на месте.
Теперь я знаю, что есть библиотеки веб-сокетов, которые действительно могут это сделать, и я хочу знать, как я могу создать что-то подобное для себяи освободить мой процессор, чтобы сидеть там и тратить себя, ничего не делая?