简单理解“异步事件”的定义吗?[关闭]


88

我经常遇到这个词,即使在使用Google搜索之后,仍然无法理解它的确切含义。对于某人可以提供的异步事件,是否存在一些易于理解(理想情况下为示例)的定义?

谢谢!

Answers:


422

非编程示例:

同步 如果您想吃披萨作为晚餐,那么您就不适合冷冻了。因此,您必须停止播放WOW,这会使您的公会不高兴。您去厨房,做面团,用酱汁盖住它,加奶酪,然后把它熏成自己喜欢的培根酱。您只花了20分钟的时间来制作披萨,而烤箱则再花10分钟。计时器发出蜂鸣声,然后将热饼拉出。您可以坐在电脑前,吃披萨,然后继续进行突袭。

异步 您在玩WOW时想要吃披萨作为晚餐。您在第五台显示器上打开一个浏览器窗口。您加载了比萨网站,并订购了额外的俗气培根比萨和培根黄油大蒜酱。您返回到团队,20分钟后门铃响起。你拿到比萨。您坐在电脑前坐下来,吃了披萨,然后继续进行突袭。

那么区别是什么呢?一种方法是浪费20-30分钟的宝贵WOW时间,另一种方法是浪费20美元加上小费。


53
我觉得这很有趣,感到很难过。
Denis Hoctor 2011年

3
我必须承认,这可能是我很长时间以来看到的最好的非编程解释!很好的例子!
伊班·多明格斯·诺达

我知道了,这个答案可以帮助我理解它,但是我现在想要比萨饼= /并且直到我得到比萨饼时请求才会继续-_-
JMASTER B 2015年

我喜欢“非编程示例”!
辛西娅·桑切斯

@epascarello有趣的一面真的很好!!!更不用说,很容易理解。我需要你对一个项目保持
奥马尔

19

您的页面从服务器传递到客户端浏览器,该浏览器位于Internet上的某个位置。浏览器已将页面绘制在屏幕上,有人(或某些东西)正在查看它。这是一个等待的游戏。眼睛来回移动,快速跳入这个或那个细节,时不时地向侧面飞去,远离屏幕,以调查环境中的干扰。时钟滴答作响。当用户将鼠标悬停在非活动状态时,页面会柔和地发光,手松散地悬在鼠标上,脖子向下弯曲,眼睛越来越专注于吸引您的页面提供的内容。

突然,在没有任何警告的情况下,光标开始移动,这是因为鼠标的手略微僵硬,并开始在桌子的粗糙表面上轻推一点塑料凸起。当鼠标移动时,它在屏幕上的替代品会以近似的模仿方式移动,掠过页面内容中有趣的图像和机智的言论。最终做出决定,动作暂停,一两块肌肉略有收缩,并且用坚决的手指按下鼠标按钮。鼠标中的微动开关会触发电子脉冲,突然,浏览器就会意识到发生了什么:单击鼠标。

总之,关于用户在凝视页面时所做的一切,对于浏览器,网页中的任何客户端代码以及服务器中的所有内容都是无法预测的。人为行动之间没有可知的“等待时间”。因此,由挂接到用户计算机上的设备传输的动作是在发生时发生的,而不是根据可预测的时钟发生的,也就是说,它们是异步发生的。


3
+1不错的故事:)非常吸引人……它使我动了鼠标,然后单击“向上投票”箭头。这里是异步事件再次....
费利克斯·克林

1
很好的例子,选择浏览器事件真是太好了!
sjsam 2015年

18

想想面试的结束,他们说:“不要打电话给我们,我们会打电话给您”。那是异步事件的本质。

通常,您定义函数并显式调用函数。您的程序具有从第1行开始,然后从第2行开始的结构,除了一些条件代码和迭代,调用函数等外,还有一个简单的线性同步结构。

但是在某些情况下,您有一些动作是由程序直接控制之外的事件触发的,这些事件是由程序外部产生的,例如用户界面事件(用户单击鼠标)或网络事件(有人尝试连接到您的服务器)。您的代码不会直接生成这些事件。它们通常是由操作系统根据对用户界面设备和其他系统的监视,在程序外部生成的。这些称为异步事件。

只要记住,“别给我们打电话,我们会打电话给你”


12

“在编程中,异步事件是独立于主程序流发生的那些事件。异步动作是在非阻塞方案中执行的动作,从而允许主程序流继续进行处理。”

“借助Ajax,Web应用程序可以在后台异步地从服务器检索数据,而不会干扰现有页面的显示和行为。”

当您单击“编辑并保存在SO”时,它是异步发生的。


12

异步事件是在应用程序的主线程之外运行的事件。

最好的理解方法是与同步运行的事件进行比较。最典型的示例是加载网页。

当您转到该页面时,您单击了链接,等待该页面加载,直到完成加载后才可以与该页面进行交互或使用。相比之下,如果此页面具有与某个用户操作相关联的AJAX事件(即异步JavaScript和XML事件),则此页面将异步地(理论上与其他任何操作并行地)从另一个源加载一些数据。

具有两个同步事件(A和B)的示例:首先,A做某事。当A完成时,B做某事。

具有两个异步事件(A和B)的示例:A和B都同时执行某项操作,并且两个事件都不等待另一个。


7

这是javascript中异步操作的示例(您需要打开javascript控制台)

console.log('One!');
setTimeout(function(){console.log('Two!');},0);
//Doesn't wait
console.log('Three!');};

//OUTPUT:
//One!
//Three!
//Two!

对的调用console.log('Two!')将在不阻止其后发生的其余代码的情况下执行。

在实际情况下,将setTimeout替换为单击网页上的按钮的人。对按钮单击的响应将最终发生,而不会阻止其他代码执行,例如页面渲染。


5

简而言之,这意味着在未知的时间后会发生某些事情,因此不要期望立即得到结果。

例如,“妈妈,我能给我五美元吗?”

我伸出援助之手是希望她能立即给我钱(同步)以作为回应。

实际上,她会看着我一两分钟,然后决定在需要时做出响应(异步)。


2

当两个不同的事件彼此分开发生时,您将无法执行

task1
task2

没有检查task1真的完成。


1

异步事件是我们不知道将来何时会发生的事件,例如,当服务器请求某些文件时,我们不知道它何时会满足我们的请求,或者UI事件,我们不知道用户何时会发生。单击按钮或其他UI元素,但是尽管如此,页面或应用程序上正在发生其他事情,但它不会阻止任何内容,例如,该页面使所有UI变灰,直到服务器上的某些文件不来或某些事件正在发生,所有事情都是独立的这就是异步事件的力量,简单地说就是独立事件


0

同步VS。异步事件

事件发生时会立即调用某些事件处理程序。这些称为“同步”事件。一个示例是DocumentNew。用户一旦创建新文档,就会立即调用它。

但是,某些事件通常在短暂的空闲时间之后,在事件发生后不久被调用。这些称为“异步”事件。它们是异步的,因为如果在事件发生的确切时间调用用户编写的宏,它将破坏Source Insight。


0

如果代码是同步的(或同步的),则意味着每段代码都按顺序依次运行,而下一段代码要等到上一行完成后才能运行。大多数代码通常是同步的。

如果代码是异步(或异步)的,则意味着代码可以单独运行,并且可以独立于其他代码运行。如果一堆同步代码中间存在异步代码,则在此特定问题的上下文中,无论您将其放在同步代码中的什么位置,异步代码仅在事件被触发时才运行。它是完全独立的,并且与同步代码无关,并且只要它的事件发生就可以运行,而不仅是在上一段代码运行完成时。这样的一些示例是针对在一定时间间隔上运行的代码,成功保存文件之后,发送Web请求之后,用户单击按钮时或图像加载后按时间间隔运行的代码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.