(转)关于同步和异步的理解(ajax网络编程)

在计算机中,经常会出现异步这个概念,那么该这么理解它呢?

先举个例子:
比如说我打电话给你向你请教些问题,你接到电话后说自己需要查一些资料,这时我有两个选择,如果你说你很快就能搞定,那么我就拿着听筒,等待你的结果,这便是同步,而如果你说要花较长时间,那么我就不用在那里傻等,我说我先挂掉电话你找到资料后再通知我吧,这时我就干别的事情去了,这便是异步   

同步是串行的,符合一般的结构化过程,一个函数调用就知道最终执行结果 。
异步是并发的,在操作过程中不用等待,效率较高,但处理起来较麻烦。

同步如果在电信传输中指的是发送和接收端在每个相同的周期发送和接收,每一单位数据在时钟的定位下收发;异步指发送事件并不发生在每个固定的时钟周期上,而是不定期的发送一批数据。   
对于软件上同步是指一个进程/线程执行一个操作后,等待另一个进程/线程的动作后在继续,如同两个进程按一定规则,你等等我我等等你一起走;异步是说一个进程作了一个操作后,不用等待另一进程的结果就继续向下进行,两个进程的事件上没有同部的关系。   
    
所以socket同步传送,程序返回就知道传完了,异步送和收的动作可能相差很久,需要队列、缓冲区等方式先将数据保留。  

网络编程中也是这个道理,ajax是异步工作的,不需要服务器每次多发送数据,刷新整个页面,而只需要部分刷新就可以了。

原文地址:https://www.cnblogs.com/jiangchongwei/p/1273318.html