Как уже было сказано ответчиками, это зависит от системы и может быть реализовано в любом случае.
Если я правильно помню Windows API (много лет назад), для каждого события была вызвана «оконная функция», и я сделал большой выбор, чтобы выбрать правильное действие в зависимости от типа события.
Я думаю, что большинство наборов инструментов абстрагируют это, как Java AWT с его очередью отправки событий.
Для протокола X входные события (а также «ваше окно должно быть закрашено») поступают в виде сообщений о событиях по проводам, и библиотека инструментария может преобразовать это либо в вызове функции приложения или добавьте их в очередь для последующего запроса.
Протокол X фактически работает (в основном) с двумя байтовыми потоками: один из приложения («клиент») в систему («сервер»), другой в другом направлении. Клиент отправляет пакеты запросов, сервер отправляет обратно результаты (для некоторых типов запросов), ошибки (если какой-либо запрос не может быть выполнен по какой-либо причине) и события (когда что-то происходит на дисплее, например, движение мыши, нажатие клавиши , изменение размера окна, ...).
Для локальных дисплеев в современных системах это обычно реализуется с помощью некоторого механизма общей памяти, но в принципе это может идти через TCP (или сегодня в основном через SSH) для удаленных соединений (таким образом, «по проводам»).
Однажды я начал создавать чистую реализацию клиента Java X (не завершенную, так как нашел другие более интересные вещи), и там я просто использовал Socket с его InputStream и OutputStream для подключения к серверу. Таким образом, в принципе я использовал блокирующую нативную read()
функцию Socket-InputStream для ожидания событий (а также результатов и ошибок). Я мог бы использовать java.nio.SocketChannel и в неблокирующем режиме, и тогда, в принципе, у меня был бы цикл опроса (делая другие вещи, между прочим, конечно). (Или я мог бы использовать селектор, ожидая появления новых читаемых данных - таким образом, блокируя тоже.)
Я понятия не имею, какой механизм использует реализация AWT-for-X, используемая реализациями Java для Linux и Solaris, - я полагаю, что они основаны на некотором родном инструментарии, который, в свою очередь, основан на клиентской библиотеке X (для C) "Xlib", но я не знаю, есть ли опрос, блокировка ожидания или , вызываемый кем-то в базе.