Как компьютер осуществляет обратные вызовы? - PullRequest
1 голос
/ 12 марта 2019

Я уже знаю общее использование обратного вызова.Во-первых, я регистрирую «функцию обратного вызова», когда происходит какое-то событие, эта функция будет запущена (будет выполнена).Что меня смущает, так как я узнаю, произошло ли событие?Решение, которое я могу получить, это опрос. Есть ли лучший способ проверить, произошло ли событие менее чем за O (n) время?

Хорошо, возможно, приведенный выше вопрос слишком абстрактен. Более реалистичное описаниеЯвляется ли epoll_wait избегать использования O (n) времени, чтобы проверить, готов ли дескриптор файла?

Если да, то как он это сделал?Есть ли механизм обратного вызова, который существенно отличается от опроса?

1 Ответ

0 голосов
/ 16 марта 2019

Обычно, но не исключительно, обратные вызовы вызываются после того, как какое-то периферийное устройство ввода-вывода сигнализирует о завершении операции, вызывая аппаратное прерывание.Длинная цепочка вещей, включающая такие вещи, как обработчики прерываний драйвера, семафоры, изменения защитного кольца, изменения контекста потока и процесса, сборка / постановка в очередь сообщений / требование / обработка / диспетчеризация и т. Д. И т. Д., Приводит к тому, что ваш обратный вызов вызывается, возможно, каким-то системным потоком,или из вашего собственного потока обработки сообщений или обработки сигналов, который должен соответствовать определенной структуре или ограничению.

Так что нет, опрос, как правило, не нужен и нежелателен.

...