本文主要是介绍设计模式 Concurrency 之 Half_Sync_Half_Async 半同步半异步模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 动机
- 应用场景
- 实现方案
1.动机
- 同步模式编程简单 但是IO的利用率低
- 异步模式编程复杂 但是IO利用率高
- 此模式综合了同步异步的优缺点 高层中使用同步IO模型,简化编程。低层使用异步IO模型 高效执行
2.应用场景
- 1.系统必须响应和处理外部异步发生的事件
- 2、一个或多个任务必须在单独的控制线程中执行 其他任务可以在多线程执行
- 上层任务[数据库查询,文件传输]使用同步IO模式 简化编写并行程序的难度
- 底层任务[网络控制器的中断处理]使用异步IO模型 提高了执行效率
3.实现方案
- 1.同步任务层
- 用户级的进程
- 本层的任务完成上层的I/O操作,使用同步I/O模型,通过队列层的队列中传输数据。和异步层不同,同步层的任务使用活动对象执行,这些活动对象有自己运行栈和寄存器状态。当执行同步I/O的时候,他们会被阻塞/睡眠。
- 2.队列层
- 这个层在同步任务层和异步任务层之间,提供了同步控制和缓存的功能。异步任务的I/O 事件被缓存到消息队列中,同步任务层在队列中提取这些事件(相反方向亦然)
- 3.异步任务层
- 处理低层的事件,这些事件由多个外部的事件源产生(例如网卡,终端)。和异步任务不同,此层的实体是被动对象,没有自己的运行栈,要求不能被阻塞。
-
代码实现
AsyncTask:
package com.hqq.concurrency.half_syn_half_async;import java.util.concurrent.Callable;/*** AsyncTask* 封装了一些异步执行的操作和结果。这些操作一般是在后台线程中运行然后将结果通过回调方法传递给调用者* Created by heqianqian on 2017/8/9.*/
public interface AsyncTask<T> extends Callable<T> {/*** 调
这篇关于设计模式 Concurrency 之 Half_Sync_Half_Async 半同步半异步模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!