同步与异步

同步是阻塞模式,异步是非阻塞模式。  

 

 

同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。  
异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。
 

 

 

同步在一定程度上可以看做是单线程,这个线程请求一个方法后就待这个方法给他回复,否则他不往下执行(死心眼)。 
异步在一定程度上可以看做是多线程的(废话,一个线程怎么叫异步),请求一个方法后,就不管了,继续执行其他的方法。 

 


比如一个文章系统里面,文章内容通常是字数非常多的,如果数据量大,打开会非常的慢,这个时候可以采取两种方法: 
1、死心眼:一直等待要显示的数据全部取出来 
标题、作者、来源、创建时间、关键字、点击次数、文章正文  
ok,全部取出 
显示 

碰上心急的用户,他会骂死你的。 

2、异步:首先显示能够快速取出的部分: 
标题、作者、来源、创建时间、关键字、点击数 
显示 
然后另外的一个线程等待取出文章的正文显示! 

 


异步就是:做一件事情的同事,不影响做其他的事情。 

----------------------------------------- 

 


所谓同步,可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是出于阻塞的,只有接收到返回的值或消息后才往下执行其他的命令。  
异步,执行完函数或方法后,不必阻塞性地等待返回值或消息,只需要向系统委托一个异步过程,那么当系统接收到返回值或消息时,系统会自动触发委托的异步过程,从而完成一个完整的流程。  
   
并不是说谁好谁不好,只是同步的机制不适合在正式应用的项目当中(但自己测试还是可以的) 

 

 


同步,就是实时处理,比如服务器一接收客户端请求,马上响应,这样客户端可以在最短的时间内得到结果,但是如果多个客户端,或者一个客户端发出的请求很频繁,服务器无法同步处理,就会造成涌塞。  
异步,就是分时处理,服务器接收到客户端请求后并不是立即处理,而是等待服务器比较空闲的时候加以处理,可以避免涌塞。  


同步就是调用一个函数,直接函数执行完了才返回到调用函数 
异步就是被调用函数初始化完后马上返回。 

 

 

 

若同步和异步都涉及两个线程,那么

同步中一个线程要阻塞等待另外一个线程的运行

异步中则两个线程毫无相关,自己运行自己的

 

 

 

同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。  
异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。  

 

 

 

举个例子:普通B/S模式(同步)AJAX技术(异步)
同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕

 

 

 

--------------------------------------------------------------------------------------------------------------------
同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。
异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。

所以,要我请你吃饭就用同步的方法,要请我吃饭就用异步的方法,这样你可以省钱。
--------------------------------------------------------------------------------------------------------------------
举个例子 打电话时同步 发消息是异步

---------- 

 

 

举个不太恰当的例子,就像:  
SendMessage(...)  
TRACE0("just  like  send");  
 
PostMessage(...)  
TRACE0("just  like  WSASend  using  overlapped");  
 
SendMessage是调用的时候不返回,等消息响应后才执行TRACE0,这就是同步.  
PostMessage是调用后马上返回,不用消息响应就执行TRACE0,这就是异步.


同步就是(我死心眼)我等你(给我回答),异步就是(我很忙)我不等你(给我回答) 

严格的说,异步还是有两种 
一种是等,但是等的过程和同步不一样,等的时候可以做别的工作,但是程序的主线还是等待  WaitforSingleObject(hEvent,INFINTE,TRUE);  
另外一种是CALLBACK方式,这种异步是完全不等待,程序主线发出请求之后就干别的事情去了,完全不理会请求执行的如何。  

所有异步必然设计两个以上的线程(不然不存在异步的问题),第一种方式下,请求的后期工作是在发出请求的线程上执行,第二种方式下,后期工作可以在任何线程(通常是执行请求的线程上)完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值