架构笔记[一]:同步与异步

第一阶段:同步

  所有操作顺序执行,调用函数执行完后再进行下一步操作。

第二阶段:完全异步

  问题:同步操作中,有些函数执行比较耗时,导致程序整体可用性的降低,用户体验差。

  解决:通过异步方式,不等待函数返回即执行下一步。等到函数执行完成后通过某些机制触发,使相应的结果的到继续处理。

第三阶段:部分异步

  问题:在完全异步中,会存在有些操作可能耗费时间过长,或异步函数在执行中出现错误导致不能正常返回等情况。使得调用者白白耗费某些异步触发机制的资源,尤其是在大型软件中,会导致服务器性能浪费,性能降低。

  解决:通过部分异步方式,设定异步操作等待的时间,如果超时则返回错误,释放异步触发机制的资源。

  举例: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

时间: 2024-10-22 00:38:07

架构笔记[一]:同步与异步的相关文章

node.js在windows下的学习笔记(4)---同步,异步,回调的概念

Node.js是使用事件驱动的,非阻塞的I/O模型,用于构建快速的,可扩展的网络应用程序. Node.js想解决的问题是:处理输入,输入,高并发 1.阻塞与非阻塞 阻塞也叫同步,是指每一次执行一个操作,在这个操作完成之前,代码的执行会被阻塞,无法移到下一个操作上. 阻塞就相当于你在超市里面买东西,结账,在排队,如果前面的人没买单,你就不能买,一定要等前面的人先执行完其操作才可以 非阻塞就相当于你在外婆家取号,然后就可以去干别的事情了,等轮到我们的时候,短信发到我们的手机上了,说轮到我们了,这样我

Java基础知识强化之多线程笔记07:同步、异步、阻塞式、非阻塞式 的联系与区别

1. 同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.但是一旦调用返回,就必须先得到返回值了. 换句话话说,调用者主动等待这个"调用"的结果. 对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已. 2. 异步: 所谓异步,"调用"在发出之后,这个调用就直接返回了,所以没有返回结果. 换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果.而是在"调用"发出后,"被调用者&q

Ajax知识笔记——入门,同步和异步,XHR

Ajax全称:Asynchronous Javascript and XML ,异步的javascript和XML. Ajax不是一种语言,是一种无需重新加载整个网页的情况下,能更新部分网页的技术. (与后台交互,实现局部更新,异步更新) 同步和异步: 同步(Ajax出现之前):客户端发起请求,服务端对请求进行处理和响应,这期间客户端一直在等待服务器端的响应,得到服务器端的响应之后客户端重新载入页面,这时候如果你有错误,只能再次发起请求,再次等待-- 异步(Ajax出现之后):XMLHttpRe

前端综合学习笔记---异步、ES6/7、Module、Promise同步 vs 异步

同步 vs 异步 先看下面的 demo,根据程序阅读起来表达的意思,应该是先打印100,1秒钟之后打印200,最后打印300.但是实际运行根本不是那么回事 console.log(100) setTimeout(function () { console.log(200) }, 1000) console.log(300) 再对比以下程序.先打印100,再弹出200(等待用户确认),最后打印300.这个运行效果就符合预期要求. console.log(100) alert(200) // 1秒钟

Python 中的进程、线程、协程、同步、异步、回调

进程和线程究竟是什么东西?传统网络服务模型是如何工作的?协程和线程的关系和区别有哪些?IO过程在什么时间发生? 在刚刚结束的 PyCon2014 上海站,来自七牛云存储的 Python 高级工程师许智翔带来了关于 Python 的分享<Python中的进程.线程.协程.同步.异步.回调>. 一.上下文切换技术 简述 在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说明一点术语.当我们说"上下文"的时候,指的是程序在执行中的一个状态.通常我们会用调用栈来表示这个状

socket编程的同步、异步与阻塞、非阻塞示例详解

socket编程的同步.异步与阻塞.非阻塞示例详解之一 分类: 架构设计与优化 简介图 1. 基本 Linux I/O 模型的简单矩阵 每个 I/O 模型都有自己的使用模式,它们对于特定的应用程序都有自己的优点.本节将简要对其一一进行介绍. 一.同步阻塞模式在这个模式中,用户空间的应用程序执行一个系统调用,并阻塞,直到系统调用完成为止(数据传输完成或发生错误). /* * \brief * tcp client */ #include <stdio.h> #include <stdlib

IO多路复用,同步,异步,阻塞和非阻塞 区别(转)

转自:http://www.cnblogs.com/aspirant/p/6877350.html?utm_source=itdadao&utm_medium=referral 一.什么是socket?什么是I/O操作? 我们都知道unix(like)世界里,一切皆文件,而文件是什么呢?文件就是一串二进制流而已,不管socket,还是FIFO.管道.终端,对我们来说,一切都是文件,一切都是流.在信息 交换的过程中,我们都是对这些流进行数据的收发操作,简称为I/O操作(input and outp

MySQL主从复制:半同步、异步

MySQL主从复制:半同步.异步 大纲 前言 如何对MySQL进行扩展? MySQL Replication WorkFlow MySQL主从复制模式 实战演练 MySQL异步复制实现 MySQL半同步复制实现 实验中的思考 总结 前言 本篇我们介绍MySQL Replication的相关内容, 我们首先介绍MySQL CLuster的实现原理和如何一步步构建一个MySQL Replication Cluster 看懂本文需要了解: MySQL基本操作,MySQL日志类型及其作用 如何对MySQ

同步和异步回调

同步和异步回调 作者:havoc (原文地址:http://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/) 这里讲两个使用callback设计API的指南,并且添加到我的杂记posts about minor API design points中.我之前多次在不同的场合发起过关于"sync vs. async"回调的问题.这个问题着实困扰着API设计者和使用者. 最近,这个问题在我处理Hammers

同步、异步与阻塞、非阻塞

同步阻塞,用户空间的应用程序执行一个系统调用,这意味着应用程序会一直阻塞,直到系统调用完成为止(数据传输完成或者发生错误). 同步非阻塞,设备以非阻塞形式打开,这意味着 io 操作不会立刻完成,需要应用程序调用多次来等待完成. 同步和异步 1)同步:发出一个调用时,在没有得到结果前,该调用就不返回,一旦返回就有结果.2)异步:调用在发出之后就直接返回,所以没有返回结果,换句话说,当一个异步调用发生后,调用者不会立即得到结果,而是在调用发生后,被调用者通过状态通知来通知调用者,或者通过回调函数来处