欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

并发编程简介

程序员文章站 2022-04-28 09:04:55
读【C#并发编程经典实例.PDF】一书总结: 1、并发:同时做多件事。 2、多线程:并发的一种形式,它采用多个线程来执行程序。所以多线程只是实现并发的一种方法,并发不等于多线程。 3、并行处理:把正在执行的大量任务分隔成小块,分配给多个正在运行的线程。 并行处理是多线程的一种,多线程是并发的一种。 ......

读【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、对于服务端程序,异步编程提供了扩展力。