zoukankan      html  css  js  c++  java
  • 并发编程简介

    读【C#并发编程经典实例.PDF】一书总结:

    1、并发:同时做多件事。

    2、多线程:并发的一种形式,它采用多个线程来执行程序。所以多线程只是实现并发的一种方法,并发不等于多线程。

    3、并行处理:把正在执行的大量任务分隔成小块,分配给多个正在运行的线程。  并行处理是多线程的一种,多线程是并发的一种。

    4、异步编程:并发的一种形式,采用 future 形式或者回调机制,以避免产生不必要的线程。在.net,新版的future 类型有Task和Task<TResult>。在旧版中,采用回调或事件(event)。

          异步编程的核心是异步操作:启动了的才做将会在一段时间后完成。这个操作正在执行时不会阻塞原来的线程。启动了这个操作的线程可以执行其他任务。当操作结束时,会通知他的future,或者调用回调函数,以便让程序知道任务已执行完成。

      使用 async 和 await,使异步编程变得简单。

      await关键字的作用:启动一个将被执行的任务(该任务会在新线程里面执行),并立即返回。所以await所在的函数不会被阻塞。当任务完成后,继续执行await关键字后面的代码。

      async关键字的作用:主要目的是使用方法内的await关键字生效。如果async 方法有返回值,应返回Task<T>;如果没有返回值,应返回Task。这写task相当于future,用于在异步方法结束时,通知主程序

                async方法可以返回void,应该只限于在编写事件处理程序时。

                async方法由多个同步执行的程序块组成。第一个同步块由调用该方法的线程执行。一般情况下,用await等待一个任务完成,当该任务在await出暂停,就可以捕获上下文,UI线程采用UI上下文,

                    处理ASP.NET才有ASP.NET上下文,其他情况采用线程池上下文。

                因此,每一个同步快都会试图在原始的上下文中恢复运行。这样造成了极小的性能耗损,要避免恢复上下文,可以在await中使用 ConfigureAwait 方法,设置continueOnCapturedContext的值为false,

                task任务完成后,将不会恢复前面的上下文。

                最好的做法:在核心库里面一直使用ConfigureAwait 。在外面的用户界面代码中,只在需要时才恢复上下文。

    异步编程的好处:

    1、对应面向用户的GUI程序,异步编程提高了响应能力。

    2、对于服务端程序,异步编程提供了扩展力。

  • 相关阅读:
    随笔
    json对象的默认排序问题
    SQl死锁随想
    疑惑
    .netportal
    WCF中出现方法出现无法匹配的异常
    自动播放图片,可以调整速度。
    一个二级树形菜单,初始显示为全部展开,适用于分类较少的情况。
    整理了一下以后需要用的软件
    缩略图,大图,同页显示
  • 原文地址:https://www.cnblogs.com/tangchun/p/9121287.html
Copyright © 2011-2022 走看看