Как в программировании устроены события (Events)?
Предположим, мне нужно отследить какое-то событие, например сообщение в discord или нажатие какой-либо клавиши и т.п.
Все это я могу реализовать в бесконечном цикле, который каждые X мс будет проверять пришло ли сообщение / нажата ли сейчас кнопка и т.п.
Но это считается неправильным подходом, ведь для этих целей существуют обработчики событий, которые сразу же уведомят меня о том, что произошло нужное мне событие.
Вопрос в том, как же устроены эти обработчики внутри? По сути для ожидания события так или иначе требуется цикл с проверкой условий? Или они устроены как-то по другому?
Я пытался найти информацию об этом, но везде обнаруживал только лишь уроки по применению событий в коде или созданию своего события на основе уже имеющегося класса.