转载

Half-sync/Half-async模式 上

什么网站都能找得到

Half-sync/Half-async模式集成了同步编程和异步编程,通过同步任务和异步任务的共同协作来完成计算,既保持了同步编程的简单性,又充分发挥异步编程在提高系统并发性方面的优势。

架构

Half-sync/Half-async模式是一个分层架构。它包含3个层:异步任务层、同步任务层和队列层。

Half-sync/Half-async模式的关键是如何将系统中的任务进行恰当的分解,使各个子任务落入合适的层次中。

低级的任务(如与用户界面有关的任务)或者耗时较短的任务可以安排在异步任务层(快速返回结果)。而高级的任务(如数据库访问)或者耗时较长的任务可以安排在同步任务层。异步任务层和同步任务层通过队列层进行协作:队列层负责异步任务层和同步任务层之间的数据交换。

参与者

Half-sync/Half-async模式 上
Half-sync/Half-async模式的类图

● AsyncTask:异步任务,负责接收客户端的输入,对其进行初步处理,并通过队列与相应的同步任务通信。

◇ dispatch:对输入进行初步处理,并构造相应消息放入队列由相应的同步任务进行处理。

● Queue:队列,异步任务层和同步任务层的通信中介。

◇ enqueue:消息入队列。

◇ dequeue:消息出队列。

SyncTask:同步任务,负责处理队列中的消息所对应的计算。

◇ run:执行同步任务。

序列图

第1步:客户端调用AsyncTask的dispatch方法。

第2、3步:dispatch方法对输入进行初步处理并构造相应消息放入队列,返回。

第4步:dispatch方法返回。

第5步:同步任务的run方法被JVM或者线程池调用。

第6、7步:同步任务的run方法取队列中的消息,并根据消息执行相应操作。

第1~4步运行在客户端线程中的,第5~7步是运行在后台线程(工作者线程)中的。

原文  http://www.yongjava.com/2019/04/05/half-sync-half-async模式-上/
正文到此结束
Loading...