《C#并发编程经典实例》学习笔记-第①章并发编程概述

并发编程的术语

  • 并发
    并且做多件工作
  • 多线程
    出现的一种样式,它利用五个线程来执行顺序。
    八线程是出现的一种方式,但不是唯一的花样。
  • 并行处理
    把正在进行的大度的职务分割成小块,分配给多个同时运转的线程。
    并行处理是三十二线程的一种,而十二线程是出新的一种。
  • 异步编程
    并发的一种样式,它应用future方式或回调(callback)机制,避防止生出不需要的线程。
    三个 future(或 promise)类型代表有个别快要成功的操作。在 .NET
    中,新版 future 类型有 Task 和 Task 。在老式异步编程 API
    中,采用回调或事件(event),而不是future。异步编程的主旨驰念是异步操作(asynchronous
    operation)
    :运维了的操作将会在一段时间后成功。那么些操作正在实践时,不会阻塞原来的线程。运营了那些操作的线程,可以继续执行其余职务。当操作已毕时,会打招呼它的
    future,恐怕调用回调函数,以便让程序知道操作已经终结。
  • 响应式编程
    一种评释式的编程形式,程序在该格局中对事件做出响应。
    响应式编程的宗旨情念是异步事件(asynchronous
    event)
    :异步事件可以没有三个实际的“开始”,可以在此外时刻发出,并且可以发生频仍,例如用户输入。
    比方把多个程序作为3个巨型的状态机,则该程序的行为便可视为它对一星罗棋布事件做出响应,即每换2个事件,它就更新一回协调的景况。

异步编程的五个好处

  1. 对于面向终端用户的 GUI
    程序:异步编程升高了响应能力。面对在运转时被临时锁定界面的次第,异步编程可以使程序在那儿还能流利的响应用户的输入。譬如:WPF界面,执行2个亟待拭目以待的操作时,还可以点击输入框举行填空,而不会现出卡顿,不能点击的情景照旧对页面不能进展拖拽。
  2. 对于服务器端应用:异步编程完结了可扩充性。服务器应用能够利用线程池满意其可增添性,使用异步编程后,可扩充性经常可以增进三个多少级。即进步劳务器端应用的TPS(Transactions
    Per Second)和 QPS (Queries Per Second)

相互的三种格局

互相编程的利用情形:必要执行大气的总括任务,并且这几个义务能分开成相互独立的义务块儿

互相的款式有二种:数据交互(data parallelism)和任务并行(task
parallelim)。

数码交互(data
parallelism):有雅量的多少须要处理,并且每一块数据的处理进程基本上是相互独立的。

职责并行(task
parallelim):须求履行大气职分,并且每一个义务的实施进度基本上是互为独立的。义务并行可以是动态的,借使三个任务的推行结果会发生额外的天职,这么些新增的职分也足以参与任务池。

兑现数量交互的办法

  • Parallel.ForEach
  • PLINQ(Parallel LINQ)

各种任务块要尽量的相互独立。
只要义务块是互为独立的,并行性就能成功最大化。一旦你在四个线程中共享状态,就必须以协同格局访问那么些意况,那样程序的并行性就变差了。

数码交互重点在处理数据,职责并行则尊敬执行职责。

贯彻任务并行的艺术

  • Parallel.Invoke
  • Task.Wait

普普通通状态下,没要求关怀线程池处理义务的具体做法。数据交互和天职并行都接纳动态调整的分割器,把职分分割后分配给工作线程。线程池在急需的时候会扩充线程数量。线程池线程使用工作窃取队列(work-stealing
queue)。

响应式编程奥德赛x学习难度较大

采纳境况:处理的轩然大波中包括参数,最好使用响应式编程
响应式编程的主干概念是:可旁观的流(observable stream)
响应式编程的末段代码分外像 LINQ,能够认为它就是“LINQ to
events”,它利用“推送”方式,事件到达后就活动通过查询。

TPL数据流

异步编程和互相编程那二种技术构成起来就是TPL数据流
数量流网格的着力组成单元是数码流块(dataflow block)。

LANDx 和 TPL有那一个相同点。
网格和流都有“数据项”这一定义,数据项从网格或流的高中级穿过。还有,网格和流都有“寻常完毕”(表示并未越来越多数据要求接受时发生的通知)和“不正规完毕”(在处理数量中生出错误时发生的文告)这五个概念。可是,奥迪Q7x
和 TPL 数据流的习性并不一样。

当需求举行要求计时的天职,最佳采取是安德拉x的 可观望流 observable 对象
当须要开展并行处理,最佳采纳是 TPL数据流块

线程和线程池

线程是多个独自的周转单元,各个过程之中有三个线程,各种线程可以分别同时执行命令。逐个线程有温馨独立的栈,可是与经过内的任何线程共享内存。
对少数程序来说,其中有壹个线程是独特的,例如用户界面程序有三个 UI
线程,控制台程序有一个 main 线程。

各种 .NET
程序都有多少个线程池,线程池维护着自然数额的做事线程,这一个线程等待着执行分配下去的任务。线程池可以每一天监测线程的数目。配置线程池的参数多达几十三个,可是提出利用默许设置,线程池的暗中同意设置是经过仔细调整的,适用于多数实际中的应用场景。

出现编程的筹划原理

大部产出编程技术有1个类似点:它们本质上都以函数式(functional)的。函数式编程理念是出新编程的真面目。

相关文章