我目前正在按以下方式开发事件驱动的 Java 软件(这是我的主要方法的本质):
while(true) {
Event event = eventListener.poll();
if(event != null) {
// do something
} else {
// do nothing as usual, but burn CPU time.
}
}
根据我正在构建的内容,eventListener可能会监听外部 websocket、轮询 Redis 通道以获取更新,或者等待来自同一盒子上的另一个进程的消息(可能通过 UDP/TCP/shm)。
eventListener我的想法是,这种繁忙的循环方法在返回 null 时(大多数情况下)会浪费大量 CPU 时间,因为它只是坐在那里旋转。但是,除了每次迭代之外,我不知道如何实现此设计,Thread.sleep这不是一个很好的解决方案。
理想情况下我想要一个方法:
void run(Event event) {
// do something
}
run每当事件发生时都会调用where eventListener。如果没有这样的事件可用,则理想情况下该过程应该只是闲置。
现在,我知道有一些 websocket 库实际上可以做到这一点,我想知道的是我如何为自己构建这样的东西,并将我的 CPU 从坐在那里浪费自己无所事事的状态中解放出来?
慕姐4208626
aluckdog
相关分类