Возможные проблемы с пользовательской шиной событий Java для многопоточности и производительности ⇐ JAVA
Возможные проблемы с пользовательской шиной событий Java для многопоточности и производительности
Я пишу игровой движок, используя LWJGL (Java и OpenGL). Я написал шину событий, обеспечивающую шаблон паб-подписки (аналогично шине событий Guava). У меня есть класс приложения (одиночный), который создает шину событий. Когда клиент хочет получить уведомление о событии, он просто извлекает экземпляр шины событий из класса приложения и регистрирует свой класс на шине. После этого внутри зарегистрированного класса любой метод, помеченный @Event и содержащий правильный параметр, вызывается во время соответствующего события.
Мне интересно, какие проблемы с производительностью могут возникнуть при использовании этой конструкции, а также проблемы с многопоточностью.
Например:
публичный класс Foo { общественный Фу() { Application.getInstance().getEventBus().register(this); } @Событие public void onEvent (событие ApplicationUpdateEvent) { // Вызывается при обновлении приложения } } Этот дизайн использует отражение для вызова методов прослушивания, поэтому я уверен, что производительность при этом теряется, особенно во время чего-то вроде приведенного выше примера — вызываемого в цикле каждый раз при обновлении приложения.
Я не совсем понимаю, какие проблемы с многопоточностью могут возникнуть. Может быть, события отправляются или обрабатываются в одном потоке, а не в другом?
Я пишу игровой движок, используя LWJGL (Java и OpenGL). Я написал шину событий, обеспечивающую шаблон паб-подписки (аналогично шине событий Guava). У меня есть класс приложения (одиночный), который создает шину событий. Когда клиент хочет получить уведомление о событии, он просто извлекает экземпляр шины событий из класса приложения и регистрирует свой класс на шине. После этого внутри зарегистрированного класса любой метод, помеченный @Event и содержащий правильный параметр, вызывается во время соответствующего события.
Мне интересно, какие проблемы с производительностью могут возникнуть при использовании этой конструкции, а также проблемы с многопоточностью.
Например:
публичный класс Foo { общественный Фу() { Application.getInstance().getEventBus().register(this); } @Событие public void onEvent (событие ApplicationUpdateEvent) { // Вызывается при обновлении приложения } } Этот дизайн использует отражение для вызова методов прослушивания, поэтому я уверен, что производительность при этом теряется, особенно во время чего-то вроде приведенного выше примера — вызываемого в цикле каждый раз при обновлении приложения.
Я не совсем понимаю, какие проблемы с многопоточностью могут возникнуть. Может быть, события отправляются или обрабатываются в одном потоке, а не в другом?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение