Events 如何在浏览器和本机OSs中实现事件侦听器?

Events 如何在浏览器和本机OSs中实现事件侦听器?,events,javascript-events,functional-programming,operating-system,Events,Javascript Events,Functional Programming,Operating System,在低层次上, i) Chrome怎么知道我的鼠标进入了屏幕? ii)我在Iphone上的闹钟怎么知道它是在我设置闹钟后7小时的9:00am 1) 从根本上说,是否存在重复投票 或者是否存在某种内置事件循环(在这两种情况下),我们只需将函数注册到……然后在我们的应用程序中根据需要使用正确的上下文自动调用这些函数 2) 这个事件循环是所有操作系统都公开的吗?我认为我们需要闭包和函数作为第一类对象。在像iOS这样的操作系统中,它是如何工作的,因为Objective C(而不是js或某些函数语言)是核心

在低层次上,

i) Chrome怎么知道我的鼠标进入了屏幕? ii)我在Iphone上的闹钟怎么知道它是在我设置闹钟后7小时的9:00am

1) 从根本上说,是否存在重复投票

或者是否存在某种内置事件循环(在这两种情况下),我们只需将函数注册到……然后在我们的应用程序中根据需要使用正确的上下文自动调用这些函数


2) 这个事件循环是所有操作系统都公开的吗?我认为我们需要闭包和函数作为第一类对象。在像iOS这样的操作系统中,它是如何工作的,因为Objective C(而不是js或某些函数语言)是核心语言?

与大多数随着时间增长的系统一样,它有些复杂。在不同的层次上做不同的事情。例如:你还记得吗,今天在我们的高级程序中,我们不太担心这些问题,但在十年或二十年前,你必须确保你的硬件没有使用冲突的IRQ。这实际上是一个硬件回调设置(仍处于更新状态(我无法发布足够的链接,但上一篇wikipedia文章有一个指向APIC架构的链接),但我已经多年没有处理过它们了。)。系统将有一些小例程,CPU(在x86 CPU上)将把代码的地址分配给“中断请求行”。然后,当该线路另一端的硬件发出信号时,CPU将丢弃所有内容并跳转到该代码位

不过,还有更复杂的情况,例如问题(i)。显然,鼠标光标进入Chrome窗口时没有硬件中断。发生的情况是,操作系统捕捉到鼠标移动的硬件中断,并使用这些信息更新光标位置(当然,也有类似的库可以为您提供硬件光标,并进一步搅浑查询的水域)。然后,操作系统有一个关于各种鼠标移动事件请求通知(以及如何通知每个程序)的程序列表,操作系统将遍历该列表并计算应该通知哪些程序

(ii)实际上更简单,因为最常见的中断之一是计时器。通常,操作系统仍然充当硬件和程序之间的缓冲区,如(i)所示

(1) 虽然您通常希望定期执行某些操作,但您的程序通常不需要重复轮询。不过,操作系统可能会有不同的做法。例如:我前面提到的那些中断例程必须非常快,以避免中断被中断或忽略其他事件。因此,一种常见的策略是让中断例程设置一些内存来表示发生了什么,然后让操作系统循环的正常部分定期轮询这些内存位置。然而,这是一个系统问题,而不是应用程序问题

(2) 我熟悉的大多数操作系统都提供事件回调API。有些,比如旧的MS-DOS,实际上没有给你太多的API,只是让你分配自己的中断处理程序(用于硬件和软件中断)。大多数现代操作系统通过调度器公开这个功能。程序将在等待特定事件或一组事件时放弃控制。各种库将其隐藏在自己的内部事件循环中。回调函数是处理这些库的内部事件循环的常用方法。我不完全有资格对Objective C说话,但由于它是C的一个严格超集(根据维基百科),它可以像C一样使用回调(我想可能被认为是糟糕的风格)


我希望这能给你一些你想要的信息。

这太宽泛了,无法给出一个简单的答案——Windows不是Android不是iOS,Chrome不是Firefox。试着问一个更直接的问题。谢谢尼克。这太棒了。我知道我的问题很广泛,但这很有帮助。看来我的直觉也不算太远。你有没有推荐一本操作系统的书来正确地学习这些东西?我很高兴我能帮上忙。不幸的是,我不知道有一本关于这个话题的书。我确信这样的书是存在的,但我从许多零散的小来源(教程、手册、在图书馆闲逛、文章等)学到了我所知道的东西。对不起,我帮不了你了。也许一些阅读本文的第三方可以推荐一本关于操作系统设计或调度程序的好书。这个网站上甚至可能已经有这样的参考请求。