架构笔记[一]:同步与异步
Posted the_owl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了架构笔记[一]:同步与异步相关的知识,希望对你有一定的参考价值。
请求/应答通信
第一阶段:同步
所有操作顺序执行,阻塞调用,函数执行完后再进行下一步操作。
第二阶段:完全异步
问题:同步操作中,有些函数执行比较耗时,导致程序整体可用性的降低,用户体验差。
解决:通过异步方式,不阻塞,不等待函数返回即执行下一步。等到函数执行完成后通过某些机制触发,使相应的结果的到继续处理。
第三阶段:部分异步
问题:在完全异步中,会存在有些操作可能耗费时间过长,或异步函数在执行中出现错误导致不能正常返回等情况。使得调用者白白耗费某些异步触发机制的资源,尤其是在大型软件中,会导致服务器性能浪费,性能降低。
解决:通过部分异步方式,阻塞一定时间,设定异步操作等待的时间,如果超时则返回错误,释放异步触发机制的资源。
举例:WCF
======================================
异步机制
思想:
另启动一个线程,使主线程(通常是UI线程不受阻塞),通过线程间通信通知结果。
.NET中:
分类:
APM模式(Asynchronous Programing Model) 其他
EAP模式(Event-based Asynchronous Pattern) 事件驱动
对比 http://www.cnblogs.com/dctit/archive/2013/01/13/2853853.html
举例:
APM: beginXXX / endXXX
EAP: XXXAsync / XXXComplete 以及EventArgs / EventHandler
Java中:
AsyncTask;以及其他通过线程方式实现异步
MessageQueue + Looper + Handler
NIO(New IO) Selector+SocketChannel
实时通信
TCP/IP协议中,通信链接均有超时关闭机制
为了实现双方的实时通信,采用长链接+心跳包+断开重连等思路,实现链接保持
协议举例如下
TCP层:
MQTT
XMPP
AMQP
HTTP层:
Websocket
以上是关于架构笔记[一]:同步与异步的主要内容,如果未能解决你的问题,请参考以下文章
20230515学习笔记——js中的同步任务与异步任务,宏任务与微任务