快好知 kuaihz订阅观点

 

聊聊同步、异步和回调

有一天,你找到公司刚来的程序员小 T,跟他说:“我们要加个需求,你放下手里的事情优先支持,我会一直等你做完再离开”。小 T 微笑着答应了,眼角却滑过一丝不易觉察的杀意。

切入正题。世界上的所有事情大致可以分为同步去做和异步去做两种。你打电话去订酒店,电话另一边的工作人员需要查下他们的管理系统才能告诉你有没有房间。这时候你有两种选择,一种是不挂电话一直等待,直到工作人员查到为止(可能几分钟也可能几个小时,取决于他们的办事效率),这就是同步的。另一种是工作人员问了你的联系方式就挂断了电话,等他们查到之后再通知你,这就是异步的,这时候你就可以干点其他事情,比如把机票也定了之类的。同步和异步的区别就在于,在下达了执行任务的命令后,是等到执行完成之后才能得到结果呢,还是马上就知道了结果(尽管是不确定的答案)。

计算机世界也是如此。我们写的代码是交给 CPU 去执行的,在这个过程中经常面临是让 CPU 同步执行还是异步执行的选择。比如我写了一个 APP,它可以帮你下载网络上的一个文件。当你输入一个文件的网址,按下下载按钮的一瞬间,CPU 就收到了一个下载文件的任务。我们先想象一下同步执行时什么情况。CPU 立刻停掉了手头的事情,包括绘制界面、对用户的点击做出响应等等,倾尽全力去帮你下载文件。但是,这时候你会发现,你的屏幕再也没有响应了,整个系统就像死了一样(废话,CPU 都被你的下载任务抢走了)。过几秒钟,如果是 Android 系统则会弹出一个下面图 1 的提示,用户非常感动,然后无情的卸载了这个 APP(尼玛裤子都脱了,你让我看这个)。同样的情况异步执行要好很多。CPU 马上告诉你任务已经被受理了,等下载完成我会通知你的。于是呢,屏幕照样刷新,用户点击都能做出处理,就好像没有下载过一样。然而 CPU 并没有闲着,它开启了一个线程,专门处理这个下载任务(还记得之前讲过的线程的概念吗?不用担心我们下面会详细讲)。过了几个小时下载完了,你会收到一个通知,告诉你任务执行的结果(图 2)。

本站资源来自互联网,仅供学习,如有侵权,请通知删除,敬请谅解!
搜索建议:聊聊同步、异步和回调  异步  异步词条  回调  回调词条  聊聊  聊聊词条  同步  同步词条  
产品

 为什么网易系擅长做产品

看到过很多文章讲网易系的创业者,说来惭愧,身为网易系,我只是个好的产品经理,并不是好的创业者。不过我倒是可以试着总结一下,为什么网易系的产品大都做得不错。200...(展开)

产品

 一个程序员想对产品经理说的话

产品经理,你觉得你在程序员眼中是怎样的角色?先自报家门,我是一个开发人员,对产品也有一定了解和见解,从业三年,工作上对接过的产品经理&项目经理前前后后有五六个,...(展开)