Я изучаю компьютерную науку и изучил многие основные понятия о том, что происходит «под капотом» во время работы компьютерной программы. Но недавно я понял, что не понимаю, насколько эффективны работы программного обеспечения.Как программные события работают внутри?
В аппаратном обеспечении это просто: вместо процессора «ожидание», чтобы увидеть, произошло ли что-то, компонент отправляет запрос прерывания.
Но как это работает, например, при переходе от мыши? Я предполагаю следующее: если мышь посылает сигнал («перемещается»), операционная система вычисляет свою новую позицию p, затем проверяет, какая программа рисуется на экране, сообщает, что позиция программы p, тогда сама программа проверяет, объект находится в точке p, проверяет, связаны ли какие-либо обработчики событий с указанным объектом и, наконец, запускает их.
Это звучит ужасно неэффективно для меня, поскольку крошечное движение мыши соответствует множеству переключателей контекста процессора (которые я узнал относительно дорого). И тогда есть десятки фоновых приложений, которые, возможно, захотят делать и свои собственные.
Где моя интуиция терпит неудачу? Я понимаю, что даже «медленные» 500-мегагерцовые процессоры выполняют 500 миллионов операций в секунду, но все же кажется, что слишком много работы для такого простого события.
Заранее благодарен!
Будьте осторожны с такими понятиями, как «неэффективность», потому что эффективность всегда относительна, а когда процессоры работают от 6 до 9 порядков быстрее, чем мы, интуиция о том, что эффективна, нельзя доверять. Это помогает рассматривать его в количественном выражении. –
... и BTW, даже запрос прерывания в процессоре по-прежнему выполняется оживленным ожиданием на уровне микрокода. В автомате состояния микрокода есть точка, в которой запрашивается строка запроса прерывания, чтобы узнать, следует ли запускать последовательность прерываний. –