我对于异步这个词印象非常深刻,因为跟他一起出现的英文名词 Asynchronous 我每次都不知道怎么念,所以见一次百度一次,但是下一次见又不会念了所以这个词深深的映在了我的脑海,今天学多线程的时候偶然又接触到了这个词,秉着不懂就问,不会就学的原则,那就把这个东西搞清楚把。
设想一下这个情景,你列了个购物清单(A,B,C,D)去商店买东西,你向老板询店问有没有你想要的A(I/O操作),于是老板去仓库查看,这个时候假如你在前台等待老板查询结果回来那么这种询问等待的方式为同步,此时你相当于被挂起,是处于阻塞状态的,而如果你没有在前台等待老板的查询而是接着进店逛看有没有你想要的B,C,D,老板查询回来会主动过来找你告诉你查询结果,那么这种查询不等待的方式为异步,这个时候你是非阻塞的。有了这个例子,那么相关概念就很好理解了。显然,异步的方式效率更高。
同步:发出一个调用,并等待调用结果。
异步:发出一个调用,该调用不等待调用的结果直接返回,当结果出来时,被调用对象会同过某种方式来通知调用者返回值是多少。
同步与异步强调的是消息通信机制,而阻塞与非阻塞强调的是在等待调用结果时的状态。
线程.join()其实是令所有先完成的线程处于阻塞状态,等到所有的线程都完成了,主线程才会继续向下执行代码。
这也可以理解为什么因为有GIL存在的Python多线程适合与I/O密集型应用了。当进入一个IO操作时,可以释放当前的锁,转向下一个IO操作。
记录的虽然简单,但是总算是从0迈向了1.
Asynchronous – A syn chro nous A sin korol ners 发音分解下,大概会读了。