彻底理解什么是同步和异步!

相信很多同学遇到同步异步这两个词的时候大脑瞬间就像红绿灯失灵的十字路口一样陷入一片懵逼的状态:
是的 , 这两个看上去很像实际上也很像的词汇给博主造成过很大的困扰 , 这两个词背后所代表的含义到底是什么呢?
我们先从工作场景讲起 。
 
苦逼程序员假设现在老板分配给了你一个很紧急并且很重要的任务 , 让你下班前必须完成(万恶的资本主义) 。为了督促进度 , 老板搬了个椅子坐在一边盯着你写代码 。
你心里肯定已经骂上了 , “WTF , 你有这么闲吗?盯着老子 , 你就不能去干点其他事情吗?”
老板仿佛接收到了你的脑电波一样:“我就在这等着 , 你写完前我哪也不去 , 厕所也不去 。”

彻底理解什么是同步和异步!

文章插图
图片
 
这个例子中老板交给你任务后就一直等待 , 什么都不做直到你写完 , 这个场景就是所谓的同步 。
第二天 , 老板又交给了你一项任务 。
不过这次就没那么着急啦 , 这次老板轻描淡写 , “小伙子可以啊 , 不错不错 , 你再努力干一年 , 明年我就财务自由了 , 今天的这个任务不着急 , 你写完告诉我一声就行” 。
这次老板没有盯着你写代码 , 而是转身刷视频去了 , 你写完后简单的和老板报告一声“我写完了” 。
彻底理解什么是同步和异步!

文章插图
图片
在这个例子中老板交代完任务后不再一直等着什么都不做而是就去忙其它事情 , 你完成任务后简单的告诉老板任务完成 , 这就是所谓的异步 。
值得注意的是 , 在异步这种场景下重点是在你写代码的同时老板在刷剧 , 这两件事在同时进行 , 而不是一方等待另一方 , 因此这就是为什么一般来说异步比同步高效的本质所在 , 不管同步异步应用在什么场景下 。
我们可以看到同步这个词往往和任务的“依赖”、“关联”、“等待”等关键词相关 , 而异步往往和任务的“不依赖” , “无关联” , “无需等待” , “同时发生”等关键词相关 。
By the way , 如果遇到一个在身后盯着你写代码的老板 , 三十六计走为上策 。
 
打电话与发邮件作为一名苦逼的程序员是不能只顾埋头搬砖的 , 平时工作中的沟通免除不了 , 其中一种高效的沟通方式是吵架 。。。啊不 , 是电话 。
通常打电话时都是一个人在说另一个人听 , 一个人在说的时候另一个人等待 , 等另一个人说完后再接着说 , 因此在这个场景中你可以看到 , “依赖”、“关联”、“等待”这些关键词出现了 , 因此打电话这种沟通方式就是所谓的同步 。
彻底理解什么是同步和异步!

文章插图
图片
另一种码农常用的沟通方式是邮件 。
邮件是另一种必不可少沟通方式 , 因为没有人傻等着你写邮件什么都不做 , 因此你可以慢慢悠悠的写 , 当你在写邮件时收件人可以去做一些像摸摸鱼啊、上个厕所、和同时抱怨一下为什么十一假期不放两周之类有意义的事情 。
同时当你写完邮件发出去后也不需要干巴巴的等着对方回复什么都不做 , 你也可以做一些像摸鱼之类这样有意义的事情 。
彻底理解什么是同步和异步!

文章插图
图片
在这里 , 你写邮件别人摸鱼 , 这两件事又在同时进行 , 收件人和发件人都不需要相互等待 , 发件人写完邮件的时候简单的点个发送就可以了 , 收件人收到后就可以阅读啦 , 收件人和发件人不需要相互依赖、不需要相互等待 。
你看 , 在这个场景下“不依赖” , “无关联” , “无需等待”这些关键词就出现了 , 因此邮件这种沟通方式就是异步的 。
 
同步调用现在终于回到编程的主题啦 。


推荐阅读