Разве они неоднократно проверяют на условие и выполняются, если условие соблюдают. Исключая, как ОС знает точно, когда USB-устройство включается, или как MSN знает точно, когда Вы получаете электронное письмо. Как это работает?
Спасибо
На низком уровне ядро ОС «знает», когда что-то происходит, потому что рассматриваемое устройство отправляет процессору аппаратное прерывание.
Итак, когда, скажем, приходит сетевой пакет, сетевой контроллер отправляет прерывание, и ядро ОС отвечает соответствующим образом.
На программном уровне это работает совершенно по-другому - большинство прикладных программ запускают «цикл событий», в котором они извлекают сообщение (скажем, сообщение от ОС о том, что «в вашем приложении была нажата мышь». ), выполните соответствующие действия в ответ на это, а затем прослушайте другие сообщения. Если сообщения нет, ОС приостанавливает поток, пока не получит сообщение для доставки.
Зависит.
Часто прослушиватель событий регистрируется в объекте, который генерирует событие. Когда событие происходит, объект выполняет итерацию по всем зарегистрированным им слушателям, информируя их о событии. Взгляните, например, на модель событий AWT / Swing в Java.
Как ОС точно знает, когда получает USB.
На низком уровне я подозреваю, что это аппаратное прерывание (кто-нибудь поправит меня, если я ошибаюсь), который обрабатывается ядром / драйвером USB. Часто есть системы более высокого уровня (например, DBUS), которые слушают это и имеют слушателей событий, которые их слушают.
или как MSN точно знает, когда вы получите электронное письмо.
Я подозреваю, что это простой случай опроса почтового ящика (например, через POP3) каждые x секунд и проверки количества сообщений (хотя может быть и ошибкой).
Анон. довольно хорошо объясняет разницу между аппаратными прерываниями и прослушиванием событий на программном уровне.
Такие программы, как средства проверки электронной почты, обычно запускают фоновые службы, которые опрашивают свой почтовый сервер каждый период X, проверяя наличие новой почты. Есть и другие способы сделать это, но для событий на уровне программного обеспечения это почти наверняка будет что-то вроде этого.
Взгляните на Прерывания , это должно объяснить, как оборудование инициирует определенные «события»