文档章节

同步、异步

依宸2016
 依宸2016
发布于 2016/11/11 12:19
字数 799
阅读 0
收藏 0

同步异步指是通信模式

首先是通信的同步,主要是指客户端在发送请求后,必须得在服务端有回应后才发送下一个请求。所以这个时候所有请求将会在服务端得到同步 
其次是通信异步,指客户端在发送请求后,不必等待服务端回应就可以发送下一个请求,这样对于所有请求动作来说将会在服务端得到异步,这条请求链路就象是一个请求队列,所有动作在这里不会得到同步的。 

在实现过程中,如果服务端是异步话,客户端也是异步话,通信效率会很高,但如果服务端在请求返回时也是返回给请求链路时,客户端是可以同步的,这种情况下,服务端是兼容同步和异步的。相反,如果客户端是异步而服务端是同步的也不会有问题,只是处理效率低了些。

同步
      所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。但是一般而言,我们在说同步异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是 SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的 LRESULT值返回给调用者。

异步
      异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知回调来通知调用者。以 CAsycSocket类为例(注意,CSocket从CAsyncSocket派生,但是起功能已经由异步转化为同步),当一个客户端通过调用 Connect函数发出一个连接请求后,调用者线程立刻可以朝下运行。当连接真正建立起来以后,socket底层会发送一个消息通知该对象。这里提到执行 部件调用者通过三种途径返回结果:状态、通回调。可以使用哪一种依赖于执行部件的实现,除非执行部件提供多种选择,否则不受调用者控制。如果执行部 件用状态来通知,那么调用者就需要每隔一定时间检查一次,效率就很低(有些初学多线程编程的人,总喜欢用一个循环去检查某个变量的值,这其实是一种很严重 的错误)。如果是使用通知的方式,效率则很高,因为执行部件几乎不需要做额外的操作。至于回调函数,其实通知没太多区别。

本文转载自:http://blog.csdn.net/liwb1987/article/details/38314865

依宸2016
粉丝 1
博文 94
码字总数 0
作品 0
济南
高级程序员
私信 提问
异步复位同步化(同步化的异步复位)实现和注意事项

参考高级设计:http://www.eefocus.com/coyoo/blog/13-12/301064_679a3.html 异步复位同步化(同步化的异步复位) 为了避免纯粹的同步复位和纯粹异步复位的问题,可以使用一种叫做同步化的异...

u012923751
2018/04/04
0
0
何为同步和异步

Android Telephony相关应用中,Telephony大量使用了Handler、Broadcast等通信方式,而在Android操作系统平台中的Handler消息处理、Broadcast广播消息等均采用异步通信机制,那么我们首先要清...

colorlesswind
2015/12/03
107
0
同步,异步,阻塞和非阻塞的理解

概念 同步是两个对象之间的关系,而阻塞是一个对象的状态。 同步,异步 访问数据的方式,同步需要主动读写数据,在读写数据的过程中还是会阻塞;异步只需要I/O操作完成的通知,并不主动读写数...

好铁
2016/08/28
47
0
关于同步,异步,阻塞与非阻塞的一些认识

当你们在说同步,异步,阻塞,非阻塞的时候到底在说什么? 一个术语的描述应该有一个目标对象吧 那些说同步,异步的家伙,从来不说这个目标对象是谁,在程序的运行过程中,有很多参与者,到底...

隐性精神病人
2014/08/02
0
5
node:event-loop & 宏任务 & 微任务

event-loop(事件轮询) 代码进入执行栈后会判断当前代码是同步任务还是异步任务,如果是同步任务则会将任务调到主线程同步执行,如果是异步任务则会将任务调到异步队列中。 主线程同步任务执...

小草先森
02/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Angular 英雄编辑器

应用程序现在有了基本的标题。 接下来你要创建一个新的组件来显示英雄信息并且把这个组件放到应用程序的外壳里去。 创建英雄组件 使用 Angular CLI 创建一个名为 heroes 的新组件。 ng gener...

honeymoose
今天
5
0
Kernel DMA

为什么会有DMA(直接内存访问)?我们知道通常情况下,内存数据跟外设之间的通信是通过cpu来传递的。cpu运行io指令将数据从内存拷贝到外设的io端口,或者从外设的io端口拷贝到内存。由于外设...

yepanl
今天
6
0
hive

一、hive的定义: Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再在Hadoop平台上运行,达到快速开发的目的 Hive中的表是纯逻辑表,就只是表的定义,即表的元数据。本质就是Hadoop的目...

霉男纸
今天
5
0
二、Spring Cloud—Eureka(Greenwich.SR1)

注:本系列文章所用工具及版本如下:开发工具(IDEA 2018.3.5),Spring Boot(2.1.3.RELEASE),Spring Cloud(Greenwich.SR1),Maven(3.6.0),JDK(1.8) Eureka: Eureka是Netflix开发...

倪伟伟
昨天
15
0
eclipse常用插件

amaterasUML https://takezoe.github.io/amateras-update-site/ https://github.com/takezoe/amateras-modeler modelGoon https://www.cnblogs.com/aademeng/articles/6890266.html......

大头鬼_yc
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部