网上看的同步异步个人感觉都没讲到点子上。
一般的说法都是总结下就是
异步就像发短信一样
同步就行打电话一样
(个人感觉这个说法不对)
我觉得要理解这个东西 先要知道为什么需要同步/异步:
因为共享资源在并发执行的时候会出现脏数据,所以才同步解决
同步可以是线程之间的同步,可以是进程之间的同步
因为他们需要解决的是共享资源的问题。
那为什么需要异步?为了更高效的利用计算机 所以才异步
而异步,即只能是线程之间的异步。(应该没错吧),如果为了异步开进程那个太蠢了吧,所以才会有异步是目的,多线程是具体方法。
就这点我觉得异步和同步就不是相互关联的东西。可能是翻译的问题,本人英文不太好,具体也不知道。
之所以连个东西能够联系起来大概就是因为,名字叫的太像兄弟两了。
所以上面说的那个,打电话和短信的说法 应该是不对的吧。
你不能因为打电话需要别人接听,你才能完成这个打电话的过程,而发短信不不需要对方点接受就能发短信,就说打电话是同步的,发短信是异步的吧。
只能说,一个手机不能同时接听2个人的电话,对于这个电话资源需要去同步的。
正打电话的时候你能够收到短信,而收短信的这个操作。相对于打电话来说就是异步的。
总结一下:
异步是异步操作,所以异步需要一个主体,在主体程序之上我们开一个线程做另外的事情,让计算机可以更高效的执行,比如web页面ajax操作,你不需要再次重新申请整个页面的资源。就能得到自己要的数据。
同步是同步资源,所谓同步操作,也是保证资源得到同步,不出现我们对0操作时,A+1而B-1 结果不是0的情况。
举个例子:
早上我有30分钟的空闲,我烧水要10分钟,刷牙要5分钟,洗脸要5分钟,吃早饭10分钟。
异步:
我先开启烧水,过程中我刷牙,洗脸,最后吃早饭,还有能结余10分钟。那我岂不是能多睡会
在这个过程中,刷牙。洗脸相对于烧水就是个异步的操作。
但实际上完全可以
先刷牙,在洗脸,然后烧水,吃早饭。只不过少了十分钟空闲
同步:
意味着我不能再刷牙的时候吃早饭,(当然你非要说你能一边刷牙一边吃早饭,也不是不行)
因为他们都要用到嘴巴,而我又不能让自己多长一张嘴,所以我需要同步嘴巴这个资源。
个人感觉:异步应该是一种编程思想,为了更高效的执行计算机操作,能异步的操作,完全都可以不用去异步执行,最多浪费计算机资源。
而同步则不是,需要同步意味着,资源必须保证不出错。