【发布时间】:2011-02-22 16:00:28
【问题描述】:
我是计算机科学专业的学生,并且已经了解了计算机程序运行时“幕后”发生的许多基本概念。但最近我意识到我不明白软件事件如何有效地工作。
在硬件中,这很容易:不是处理器“忙于等待”以查看是否发生了什么事情,而是组件发送中断请求。
但是这在例如鼠标悬停事件中是如何工作的呢?我的猜测如下:如果鼠标发送一个信号(“移动”),操作系统计算它的新位置 p,然后检查屏幕上正在绘制什么程序,告诉程序位置 p,然后程序本身检查什么对象位于 p,检查是否有任何事件处理程序与所述对象关联并最终触发它们。
对我来说这听起来效率非常低,因为鼠标的微小移动相当于大量的 cpu 上下文切换(我了解到这些切换相对昂贵)。然后有几十个后台应用程序可能也想做自己的事情。
我的直觉在哪里让我失望?我意识到即使是“慢”的 500MHz 处理器每秒也执行 5 亿次操作,但对于这样一个简单的事件来说,工作量似乎还是太大了。
提前致谢!
【问题讨论】:
-
小心“低效”之类的概念,因为效率总是相对的,当处理器的运行速度比我们快 6 到 9 个数量级时,关于什么是高效的直觉是不可信的。它有助于从数量上看待它。
-
...顺便说一句,即使处理器中的中断请求仍然是在微码级别通过忙等待来完成的。在微码状态机中有一个点,它查询中断请求行以查看是否应该启动中断序列。
标签: language-agnostic computer-science performance events