软件事件如何在内部工作?

Dud*_*dle 1 language-agnostic performance events computer-science

我是计算机科学专业的学生,​​在计算机程序运行的过程中学到了很多关于"幕后"的基本概念.但最近我意识到我不明白软件事件如何有效地工作.

在硬件中,这很容易:代替处理器"忙着等待"以查看是否发生了某些事情,组件发送中断请求.

但是,这是如何工作的,例如,鼠标悬停事件?我的猜测是:如果鼠标发送信号("移动"),操作系统计算其新的位置p,然后检查什么程序正在在屏幕上绘制,告诉程序位置P,则程序本身检查什么object位于p,检查是否有任何事件处理程序与所述对象关联并最终触发它们.

这对我来说听起来非常低效,因为微小的鼠标移动等同于许多cpu上下文切换(我学到的相对昂贵).然后有许多后台应用程序也可能想要自己做一些事情.

我的直觉在哪里失败了?我意识到即使是"慢速"的500MHz处理器每秒也能完成5亿次操作,但对于这样一个简单的事件来说,它似乎仍然有太大的作用.

提前致谢!

And*_*gor 5

考虑网络数据包之类的事件,因为它们通常由类似的机制处理.现在想想,你的鼠标每秒最多发送几百个数据包,每个数据包大约6个字节.与现代机器的带宽功能相比,这没什么.

实际上,你可以创建一个响应式GUI,其中每个鼠标运动在大约20年前构建的硬件上实际上发送了一个网络数据包(86字节包括标题):X11,Linux和大多数其他Unix的基本GUI机制,可以做到这一点,并且经常在80年代末和90年代初使用这种方式.当我第一次使用GUI时,它就是这样,虽然现在的标准不是很好,但鉴于它在20 MHz机器上运行,它确实可用.