美文网首页
异步基础

异步基础

作者: 黄咕咕鸡 | 来源:发表于2017-01-12 17:16 被阅读0次

异步

讲一个概念,异步跟多线程,就像巴基斯坦和卡巴斯基,有鸡巴关系

为什么要用异步方法?

没有人喜欢线程被阻塞,尤其发出IO操作的时候,
异步操作是强大的,它是许多高吞吐量,快响应时间架构的基石。

为什么异步很难

首先异步很难,异步代码,有大量的状态操作,比方说鼠标拖拽功能,你就需要维护很多中间状态.
异步操作之间组合,交互,取消等操作很难实现,
异步代码会破坏"代码局部性"从而让代码可读性非常差.(想想js中的回调噩梦)而且也很难一个Try/catch 统一异常处理

怎么异步?

  1. 基于回调

    这是传统的异步模型,最常用的方法,早期版本的C# 的Begin/End异步或者基于事件的异步模型.或者js里面的ajax,
    但是,这种编程模型很糟糕,首先,破坏了代码的局部性,写起来非常麻烦,更不用说异步组合,异常处理,取消,等操作.

  2. 基于迭代器

    有了迭代生成器,我们就可以在发起异步操作的时候,将控制权交给外部,由外部来决定代码什么时候继续执行,
    这就在一定程度上保持了代码的局部性。

  3. 基于框架

    比如Reactive Extensions,使用别人已经抽象好的异步模型,这样就可以不用管异步细节,框架已经封装好了一切.

  4. 基于语言特性

    比如C# 5 的Async Await,虽然本质上,是一种回调,但是,微软已经封装好了异步模型,你可以很圆润的将异步代码写在一个方法里.

异步与多线程

本来不想比较的,后来想想还是放一起了.
线程的本质,是操作系统提供的一种逻辑功能,是进程中并发运行的的代码.
而异步,是通过上面写的几种手段,让主线程不等待.当然,异步代码背后可能也有多线程任务在跑.
换种说法,异步是目的,多线程,是手段.

相关文章

  • 温故之.NET 异步

    这篇文章包含以下内容 异步基础 基于任务的异步模式 部分 API 介绍 异步基础 所谓异步,对于计算密集型的任务,...

  • 异步处理

    回调函数处理异步 events 模块处理异步 基础模样 实例

  • 异步基础

    异步 为什么要用异步方法? 为什么异步很难 怎么异步? 基于回调这是传统的异步模型,最常用的方法,早期版本的C# ...

  • .NET多线程(五)异步操作

    5、异步操作 5.1 异步操作基础 异步操作发展历史,APM模式,EAP模式,TPL模式 .NET 1.0 Sys...

  • JS异步那些事 一 (基础知识)

    JS异步那些事 一 (基础知识)JS异步那些事 二 (分布式事件)JS异步那些事 三 (Promise)JS异步那...

  • JS异步那些事 三 (Promise)

    JS异步那些事 一 (基础知识)JS异步那些事 二 (分布式事件)JS异步那些事 三 (Promise)JS异步那...

  • JS异步那些事 四(HTML 5 Web Workers)

    JS异步那些事 一 (基础知识)JS异步那些事 二 (分布式事件)JS异步那些事 三 (Promise)JS异步那...

  • JS异步那些事 二 (分布式事件)

    JS异步那些事 一 (基础知识)JS异步那些事 二 (分布式事件)JS异步那些事 三 (Promise)JS异步那...

  • JS异步那些事 五 (异步脚本加载)

    JS异步那些事 一 (基础知识)JS异步那些事 二 (分布式事件)JS异步那些事 三 (Promise)JS异步那...

  • NodeJS基础原理

    NodeJS基础原理 异步IO原理浅析及优化方案 异步IO的好处(输入输出input output) 前端通过异步...

网友评论

      本文标题:异步基础

      本文链接:https://www.haomeiwen.com/subject/ovxjbttx.html