什么是异步处理

2024-05-05 06:17

1. 什么是异步处理

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

什么是异步处理

2. 什麽叫同步处理

概括来讲,就是有两个数据源,最初它们的数据都是一样的。若一个数据源的数据经过添加、修改、删除等操作发生了改变(或者两个数据源的数据都发生了改变),那么为了使两个数据源的数据保持一致,即让一个数据源数据的改变反映到另一个上,就必须进行一个让两个数据源的数据保持一致的操作,这个操作就叫“同步”。同步操作结束之后,两个设备上的数据就完全一致了,处于“同步”状态。

一般来讲,两个数据源中,一个是服务器端,一个是客户端。服务器端由于其计算功能和处理功能强大,在同步过程中要比客户端做更多的计算和处理工作。

举例说明,在电脑的Outlook里面存储了很多联系人,另外在手机里面也存储了很多联系人,那么如何使Outlook里面的联系人和手机里面的联系人保持一致呢?这时候就可以通过“同步”来实现这个目的。此处由于电脑相对手机来说,计算功能和处理功能强大,因此我们将PC当作服务器端,手机当作客户端。服务器端(电脑的Outlook)和客户端(手机)第一次同步时,将进行“慢同步”,其过程如下:客户端发出自己的全部联系人给服务器端,服务器将收到的所有联系人同自己的联系人进行比较和分析。分析结束以后,服务器向客户端发出客户端没有的联系人,这样客户端就有了服务器端有而同步之前自己没有的联系人,而服务器端也将客户端有的而同步之前自己没有的联系人增加进来,这样同步结束之后,两个设备上的联系人信息就完全一致了,处于“同步”状态。

现在Outlook和手机上的联系人信息完全一致,比如各自都有10个客户的联系方式。用户外出时携带手机,在办公室则使用PC的Outlook。某一天,用户在外出中对手机上的客户1和客户4的信息进行了修改,返回公司后,又对PC上Outlook的客户2和客户8的信息作了修改,一天工作下来,用户想保持手机和PC上Outlook的客户的联系方式的一致,这个时候只需要执行“自动同步”操作就可达到该目的。手机只需要把修改过的客户信息(客户1和客户4)发给Outlook,Outlook只需要将修改过的客户信息(客户2和客户8)发给手机,然后各自进行相应的修改就可以了。这种方式之所以叫做“自动同步”是因为它不像“慢同步”那样需要把所有的信息发送给对方,而只需要将自上次同步以来修改的信息发送给对方就可以了。

如果自上次同步以来,用户对手机和Outlook里面的同一个联系人做了不同更改,那么同步的时候,就会出现冲突,那么如何处理呢。在同步以前,用户可以预先选择冲突处理策略来解决冲突。详情请查看: 冲突处理策略。

如果自上次同步以来,由于长时间没有同步或者短时间内某个数据源的数据修改较多导致“修改日志”溢出,那么下一次同步软件就会自动采用“慢同步”。

如果用户不小心删除了A数据源上的全部数据,并希望通过和B数据源的同步来恢复数据的话,用户需要选择“慢同步”,否则可能导致B数据源的部分数据也被删除的后果。因为在满足“自动同步”的条件下,软件就会错认为用户是希望删除B数据源的对应数据。

因此保险的做法是用户先对B数据源的数据进行备份,然后再同步,如果真的出现了B数据源的对应数据被删除的情况,还可以将备份的数据导入B数据源,然后选择“慢同步”来和A数据源同步。

所以平时用户需要注意对各个数据源的数据进行备份,一旦发生了上述情况,还可以恢复数据。

手机和Outlook可以同步联系人,也可以同步日程。

另外手机除了能和Outlook同步外,还可以和Outlook Express,Notes同步

3. 同步与异步

不仅仅是因为现在微服务架构盛行,之前的服务之间协作进行通信也面临这样的选择,到底用同步的方式还是用异步的方式呢?这个基础性的选择会不可避免地引导我们使用不同的实现。
  
 使用同步方案,发起一个远程服务调用后,调用方会阻塞自己并等待整个操作的完成。
  
 协作风格为 请求/响应 。即客户端发起一个请求,然后等待响应。
  
 但是这个风格也适用于异步通信,如我可以发送一个请求,然后注册一个回调,当服务端操作结束后,调用该回调。
                                          
 这里首先说明一下,使用编排的架构风格不一定就是采取的请求/响应模式。但是基本情况会使用这种相应模式。
  
 它的特征就是有一个服务作为中心大脑,由它来保证整套流程的运行。
  
 然而缺点是,承担流程编排的服务作为中心控制点承担了太多的职责,它会成为网状结构的中心枢纽及很多逻辑的起点。这种方法就会导致出现少量的 上帝服务 ,而与它打交道的那些服务会沦为贫血的、基于CRUD的服务。
  
 Remote Procedure Call 远程过程调用
  
 核心特点是使用本地调用的方式和远程进行交互。即允许我们进行一个本地调用,但事实上结果是由某个远程服务器产生的。
  
 REpresentational State Transfer 表述性状态转移
  
 REST本身没有提到底层应该使用什么协议,但是我们通常都是使用HTTP。
  
 使用异步方案,调用方发出一个远程服务调用后,不需要阻塞等待操作的完成就可以返回。
  
 协作风格为 基于事件 。即客户端不是发起请求,而是发布一个事件,然后期待其他的协作者接收到该消息,并且知道该怎么做。我们从来不告知任何人去做任何事情。基于事件的系统天生就是异步的。
  
 整个系统都很聪明,业务逻辑并非集中存在于某个核心大脑,而是平均地分布在不同的协作者中。
  
 基于事件的协作方式耦合性很低。
                                          
 协同服务的话如上图所示,可以仅仅由某个服务使用异步的方式触发一个事件。然后就会有相应的协作服务去做处理。这种方式可以显著的消除耦合,如果其他的服务也关心这个事件,简单地订阅这个事件就可以了。
  
 然而它的缺点是不太容易的看到明显的业务流程视图,需要做一些额外的工作来监控流程,以保证其正确地运行。如构建一个与编排那张图所展现的流程相匹配额监控系统。实际的监控活动是针对每个服务的,但最终需要把监控到的结果映射到业务流程中。从而我们可以得知系统是如何运作的。

同步与异步

4. 聊聊同步和异步(2)

  Servlet() 作为用户调用的方法,其通知业务组件service(),并不知道业务组件何时调用完毕,因此将complete()回调函数作为参数,调用业务组件。等待业务组件处理完毕业务之后,再次调用complete()函数,表明已经完成业务调用。 
                                            在java中无法传递函数,因此将接口作为参数进行传递,从而达到传递函数的目的。 
    用户主线程,调用业务组件。而业务主线程驱动ServletProcess类的invokeService方法,在调用业务组件的同时,开启一条线程来处理业务逻辑。因主线程驱动的ServletProcess类无法得知异步线程何时才能完成业务逻辑处理。所以,将回调函数所在的接口作为参数传递给业务逻辑所处的异步线程。在异步线程完成之后,再次调用callBack方法,表明业务逻辑完成处理。 
    异步线程驱动的业务组件: 
                                            如果使用同步处理,那么用户每次请求一次,就需要从线程池中获取一个线程进行处理用户的请求。那么在同步的条件下,都是由这一个线程同时进行请求处理和业务处理。如果业务处理比较耗时,那么线程就会进行阻塞。此时,有更多的用户进行请求,线程池中的线程在极端情况下全部阻塞,那么就无法处理用户的请求。用户必须等待之前的业务处理的完成,很大程度上影响系统的吞吐量。因此提倡采用servlet的异步处理。 
    servlet通知完耗时业务组件处理业务之后,马上返回到线程池中,而不进行等待。后续的操作由回调函数或者事件监听器完成。这样,接下来更多的用户请求,就会充分利用线程池中的线程。 
                                            AsyncServlet异步调用业务组件处理业务逻辑,则其通知AsyncTask异步线程调用业务组件,然后立即返回。与此同时,Web容器线程将AsyncContext对象传递给AsyncTask异步线程。当异步线程处理业务完毕之后,将调用AsyncContext对象的complete方法或者dispach方法,表明业务处理完毕。 
                                           **   WebSocket的java服务器端要向客户端发送消息,可能发送这个消息非常耗时,那么此时会造成服务器端程序阻塞,使得服务器端的处理性能急剧下降。因此,可以对消息的发送进行异步处理。即WebSocket对应的Java API中的Async对象向服务器端发送消息时,调用send方法,其只是通知send方法,立即返回。异步线程(使用Future接口)来负责向客户端发送消息,此时容器主线程并不知道什么时候异步线程可以发送消息完毕。因此,在使用异步线程调用send方法的同时,将SendHandler接口传递给异步线程。当异步线程发送消息完毕时,则调用SendHandler接口的onResult方法,表明异步线程已经发送消息完毕,从而让容器主线程感知到。   **
                                            用户主线程调用servlet方法,而servlet方法调用业务组件service。此时用注册一个事件的监听器,即事件发生之后,调用callBack方法。用户在servlet方法中调用service方法,立即返回,并不知道service方法中的业务何时处理完成。利用事件监听器,在service方法中的业务处理完成之后,出发刚才注册的事件,即可调用callBack方法。 
                                            在Web容器主线程中,调用业务组件,注册一个异步线程的监听器。该监听器主要监听四个事件,success,timeout,error,startAsync。Web容器的主线程调用业务组件,则开启一个异步线程,立即返回。主线程并不知道异步线程是否已经完成了业务处理。因此,异步线程在完成了业务处理之后,AsyncContext对象调用complete或者dispatch方法,即触发了success事件。触发该事件之后,立即调用监听器的onSuccess方法,表明异步线程已经完成业务处理。 

5. 同步和异步的概念

同步指两个或两个以上随时间变化的量在变化过程中保持一定的相对关系。同步(英语:Synchronization),指对在一个系统中所发生的事件(event)之间进行协调,在时间上出现一致性与统一化的现象。在系统中进行同步,也被称为及时(in time)、同步化的(synchronous、in sync)。
异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。异步双方不需要共同的时钟,也就是接收方不知道发送方什么时候发送,所以在发送的信息中就要有提示接收方开始接收的信息,如开始位,同时在结束时有停止位。

同步和异步的概念

6. 异步信号为什么同步化处理

同步与异步的概念实际上是相对的。任何传输总存在时间间隔,当然不可能做到完全同步。这里我们需要用相对的观念去理解。概括来讲,就是有两个数据源,最初它们的数据都是一样的。若一个数据源的数据发生了改变(或者两个数据源的数据都发生了改变),那么为了使两个数据源的数据保持一致,即让一个数据源数据的改变反映到另一个上,就必须进行一个让两个数据源的数据保持一致的操作,这个操作就叫“同步”。同步操作结束之后,两个设备上的数据就完全一致了,处于“同步”状态。

同步化:就是有两个数据源,最初它们的数据都是一样的。若一个数据源的数据经过添加、修改、删除等操作发生了改变(或者两个数据源的数据都发生了改变),那么为了使两个数据源的数据保持一致,即让一个数据源数据的改变反映到另一个上,就必须进行一个让两个数据源的数据保持一致的操作,这个操作就叫“同步”。同步操作结束之后,两个设备上的数据就完全一致了,处于“同步”状态。

7. 同步,异步,并发的区别

同步(tóng bù)synchronous;sync;synchronism;synchronization 指两个或两个以上随时间变化的量在变化过程中保持一定的相对关系。

异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。

并发:

在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。   在关系数据库中,允许多个用户同时访问和更改共享数据的进程。SQL Server 使用锁定以允许多个用户同时访问和更改共享数据而彼此之间不发生冲突。   操作系统并发程序执行的特点:   并发环境下,由于程序的封闭性被打破,出现了新的特点:   ①程序与计算不再一一对应,一个程序副本可以有多个计算   ②并发程序之间有相互制约关系,直接制约体现为一个程序需要另一个程序的计算结果,间接制约体现为多个程序竞争某一资源,如处理机、缓冲区等。   ③并发程序在执行中是走走停停,断续推进的。

同步,异步,并发的区别

8. 求问什么是同步切换,什么是异步切换

1、同步切换需要网络中的基站间同步,异步切换则不需要网络中基站间的同步。基站间同步的好处是,切换时RNC已经知道基站间的时间关系,则不需要UE上报目标基站和源基站之间的时间关系(SFN-CFN)可以直接进行切换。基站异步时,RNC则需要UE测量目标基站和源基站之间的时间关系(SFN-CFN),从而确定切换后的定时。另外,基站异步时,UE搜索目标基站的时间也会长一些同步切换适用于同一BTS的小区间切换,不用重新计算TA。异步切换适用于不同BTS的小区间切换,需重新计算TA;
2、同步切换,是指同一BSC下的小区间的切换
异步切换,是指不同BSC、MSC间的切换
异步切换是有信令physical info
3、异步切换有发物理消息,同步切换木有发物理消息
最新文章
热门文章
推荐阅读