1. 宏观的异步
- 宏观的异步一般是指系统调用之间的异步。
- 宏观的异步不像java编程模型中,必须启动一个新线程去执行。凡是调用方能够快速执行完毕的方式都属于宏观的异步通信方式。
- 比如,MQ消息队列中间件,生产者和消费者都与MQ远程通信,此时MQ的作用就实现了宏观的异步。通过加入MQ,生产者和消费者都能够很快速的和MQ完成通信,而避免了重量级的操作。
- 总之,调用关系中能够避免重量级操作的方式都属于宏观的异步调用。
2. 调用机制分类
2.1 同步调用
一般写的代码都是同步调用。
A或者控制程序 调用 B 的方法,此时当前线程等待A将B调用完成后,再返回来继续继续按照顺序执行A后面的逻辑,整个流程没有利用并发的原理,执行A逻辑和服务方B的业务逻辑的线程都是当前线程,意味着如果服务方B是重量级操作,则当前线程将一直执行该重量级操作而不能做其他任何事情。
适用场景:同步调用适用于服务方不存在重量级操作的场景。
2.2 异步调用
调用方A或者控制程序调用服务方B的方法,在调用服务方B的方法时,重新委托一个新的线程执行服务方B的方法(异步肯定就是并发,要使用多线程),此时A线程直接返回,继续往下顺序执行,即当前线程非阻塞。此时,A线程其实就是客户端线程。
适用场景:消费方不需要知道服务方的执行结果;同时又不想阻塞等待服务方的重量级操作执行完毕(假如B服务方的某个重量级操作执行10个消息,那这段时间如果是同步操作的话消费方A则啥也干不了)。比如upd协议,客户端只管发送,不管对方是否收到,发完了客户端线程即返回做自己的事儿,不阻塞。
2.3 同步回调
消费方A或者控制程序调用服务方B的方法,当A执行完B的方法后,B在其方法中又反过来调用A的方法,这种情况中A的方法就叫做对于B的回调方法,一般称之为callback方法。
适用场景:请求方需要得到服务方B的处理结果,但是仅仅通过回调机制拿到服务方B的处理结果而已,并没有启动新的异步线程,仍旧需要等待服务方B执行完毕后消费方线程才能继续执行,这种方式同样会导致消费方线程阻塞。
2.4 异步回调
消费方A或者控制程序调用B的方法,委托一个新的线程去异步执行然后消费方线程立即返回。当线程执行完B的方法后,B在其方法中又反过来调用A的方法,A的方法叫做相对于B的回调方法callback。
适用场景:非常有用。异步回调时对象之间监听通信的绝佳方案,消费方不想等待服务方的重量级操作又同时想得到服务方的执行结果或者服务方的执行状态,就用异步回调实现即可。
文档信息
- 本文作者:Marshall