事件是指您单击某些内容,并且代码立即运行
轮询是指应用程序不断检查鼠标按钮是否被按住,如果将其按住在某个位置,则运行代码
事件真的存在于计算中,还是都是建立在轮询之上的层?
这是一个复杂的问题,答案取决于你(在抽象层中)回答它的程度。最终,计算机每毫秒轮询一次 USB 键盘设备,询问按住了哪些键。当 USB 设备(在计算机中)从键盘获取数据包时,此信息通过 CPU 中断传递到键盘驱动程序。从那时起,中断用于将数据从一个进程传递到另一个进程(通过 GUI 框架),并最终到达您的应用程序。
正如 Marc Cohen 在他的回答中所说,CPU 中断也会引发以表示 I/O 完成。这是一个没有轮询的示例,直到您到达硬件级别,在那里执行检查(也许每个时钟周期一次?在计算机体系结构方面有更多经验的人应该回答)以查看事件是否已发生。
这是一种通过轮询来模拟事件的常用技术,但这通常效率非常低,并导致一个两难境地,即在事件解析和轮询开销之间进行权衡,但这并不意味着真正的事件不存在。
CPU 中断(可以引发以指示外部事件(如 I/O 完成)是硬件层一直向下的事件的示例。
好吧,操作系统和应用程序级别都取决于事件而不是轮询。在无法维护状态的情况下,通常可以进行轮询。但是,在桌面应用程序和操作系统级别,应用程序具有状态;因此,他们将事件用于其进程,而不是轮询。