美文网首页
异步基础

异步基础

作者: 黄咕咕鸡 | 来源:发表于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,虽然本质上,是一种回调,但是,微软已经封装好了异步模型,你可以很圆润的将异步代码写在一个方法里.

    异步与多线程

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

    相关文章

      网友评论

          本文标题:异步基础

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