这个词我遇到过很多次,即使在谷歌搜索之后,仍然无法理解它到底是什么意思。对于某人可以提供的异步事件,是否有一些易于理解(最好带有示例)的定义?
谢谢!
这个词我遇到过很多次,即使在谷歌搜索之后,仍然无法理解它到底是什么意思。对于某人可以提供的异步事件,是否有一些易于理解(最好带有示例)的定义?
谢谢!
非编程示例:
Synchronous 你想要一个比萨当晚餐,你不是冷冻的那种。所以你必须停止玩让你的公会感到不安的 WOW。你去厨房,做面团,涂上酱汁,加入奶酪,然后用你最喜欢的培根浇头把它闷死。您只花了 20 分钟的时间制作比萨饼,而在烤箱中又花了 10 分钟。计时器发出哔哔声,你把热馅饼拿出来。你可以坐在电脑前,吃掉披萨,然后继续你的突袭。
异步 在玩 WOW 的同时,您想要一个披萨作为晚餐。您在第 5 台显示器上打开了一个浏览器窗口。您加载 Pizza 网站并订购带有培根油脂大蒜酱的额外奶酪培根披萨。你回到你的突袭中,20 分钟后门铃响了。你得到披萨。你坐在电脑前,吃掉披萨,然后继续你的突袭。
那么区别是什么呢?一种方法是浪费 20-30 分钟的宝贵 WOW 时间,另一种方法是浪费 20 美元和小费。
您的页面从服务器传送到客户端浏览器,位于 Internet 的某个地方。浏览器已经在屏幕上绘制了页面,有人或某物正在查看它。这是一个等待游戏。眼睛来回移动,以快速跳跃的方式捕捉这个或那个细节,不时飞到一边,远离屏幕,调查环境中的干扰。时钟滴答作响。当用户不活动地悬停、手松散地搭在鼠标上、脖子弯下并且眼睛越来越专注于您的页面必须提供的吸引人的东西时,页面会柔和地、被动地发光。
突然,在没有任何警告的情况下,光标开始移动,鼠标上的手稍微变硬,开始在桌子粗糙的表面上轻推塑料小凸起。当鼠标移动时,它在屏幕上的代理会密切模仿移动,掠过页面内容中有趣的图像和诙谐的评论。最终做出决定,运动暂停,一两块肌肉轻微收缩,鼠标按钮被一个坚持不懈的手指按下。鼠标中的微动开关触发电子脉冲,浏览器突然意识到发生了什么:鼠标点击。
总之,用户在注视页面时所做的一切都是以浏览器、网页中的任何客户端代码、驻留在服务器上的任何内容完全不可预测的方式发生的。人类行为之间没有已知的“等待时间”。因此,由连接到用户计算机的设备传输的动作是在它们发生时发生的,而不是根据可预测的时钟发生的——也就是说,它们是异步发生的。
想想面试结束时,他们说,“不要给我们打电话,我们会打电话给你”。这就是异步事件的本质。
通常,您定义函数并显式调用函数。你的程序有一个结构,它从第 1 行开始,然后是第 2 行,除了一些条件代码和迭代、调用函数等,还有一个简单的、线性的、同步的结构。
但在某些情况下,您的操作由程序直接控制之外的事件触发,来自程序外部的事物,如用户界面事件(用户单击鼠标)或网络事件(有人试图连接到您的服务器)。您的代码不会直接生成这些事件。它们是在您的程序之外生成的,通常是由操作系统根据对用户界面设备和其他系统的监控生成的。这些被称为异步事件。
请记住,“不要给我们打电话,我们会打电话给你”
“在编程中,异步事件是那些独立于主程序流发生的事件。异步操作是在非阻塞方案中执行的操作,允许主程序流继续处理。”
“使用 Ajax,Web 应用程序可以在后台从服务器异步检索数据,而不会干扰现有页面的显示和行为。”
当您单击编辑并保存在 SO 上时,它是异步发生的。
异步事件是在应用程序主线程之外运行的事件。
最好的理解方法是与同步运行的事件进行比较。最典型的例子是加载网页。
当您转到此页面时,您单击了一个链接并等待页面加载,并且在加载完成之前无法与此页面交互或使用此页面。相比之下,如果此页面具有与某个用户操作相关联的 AJAX 事件(即异步 JavaScript 和 XML 事件),则此页面将异步加载来自另一个源的一些数据——与正在进行的任何其他操作并行(理论上)。
具有两个同步事件(A 和 B)的示例:首先 A 做某事。当 A 完成时 B 做某事。
两个异步事件(A 和 B)的示例:A 和 B 同时做某事,并且两个事件都不等待另一个。