2

事件是当您单击某物时,代码会立即运行

轮询是应用程序不断检查您的鼠标按钮是否被按住,如果它在某个位置被按住,则运行代码

事件是否真的存在于计算中,或者这一切都是建立在轮询之上的?

4

3 回答 3

3

这是一个复杂的问题,答案取决于您(在抽象层中)回答它的深度。最终,您的 USB 键盘设备每毫秒会被计算机轮询一次,以询问正在按下哪些键。当 USB 设备(在计算机中)从键盘获取数据包时,此信息通过 CPU 中断传递给键盘驱动程序。从那时起,中断用于将数据从一个进程传递到另一个进程(通过 GUI 框架)并最终到达您的应用程序。

正如 Marc Cohen 在他的回答中所说,CPU 中断也会引发 I/O 完成信号。这是一个在您到达硬件级别之前没有轮询的示例,在硬件级别执行检查(可能每个时钟周期一次?具有计算机架构经验的人应该回答)以查看事件是否发生。

于 2012-09-26T04:58:55.243 回答
2

这是一种通过轮询来模拟事件的常用技术,但这通常效率很低,并导致您在事件解析和轮询开销之间进行权衡,但这并不意味着不存在真正的事件。

CPU 中断可以引发外部事件,如 I/O 完成,是硬件层的一个事件示例。

于 2012-09-26T04:53:46.560 回答
0

好吧,操作系统和应用程序级别都依赖于事件而不是轮询。在无法维持状态的情况下,通常可以进行轮询。然而,在桌面应用程序和操作系统级别,应用程序具有状态;因此,他们将事件用于他们的流程,而不是轮询。

于 2012-09-26T05:01:47.360 回答