zoukankan      html  css  js  c++  java
  • c#并行编程

    第二章 命令式数据并行

    几种并行类型:

    数据并行

    任务并行

    流水线

    在System.threading.tasks.parallel下

    parallel.for

    parallel.foreach(可以自定义parytitioner)

    parallel.invoke

    1. Parallel.Invoke

    没有特定执行顺序

    交错并发:逻辑内核通过时间片机制和快速上下文切换实现并行的假象

    并发:不解释

    热点:潜在的可并行代码

    加速比:串行执行时间/并行执行时间

    2. Parallel.for

    每一次迭代一会当作一个任务交给一个线程

    迭代范围上界判断是小于,所以需要加一

    3. Parallel.ForEach

    可以通过partitioner分区器进行分区,每一个迭代处理一个分区,Tuple<int,int>

    退出

    ParallelLoopState

    Break: 不会马上结束,执行完小于当前迭代的内容

    Stop:尽快退出

    ParallelLoopResult

    IsCompleted 循环完成

    !IsCompleted && !LowestBreakIteration.HasValue Stop终止

    !IsCompleted && LowestBreakIteration.HasValue Break终止

    AggregateException

    .InnerExceptions内部异常集合

    parallelOptions

    maxDegreeoOfParallelism并行度

    CancellationToken取消token

    taskScheduler任务调度器

    第三章 命令式并行任务并行

    System.Threading.Tasks.Task

    一个task代表一个异步操作,并不针对一个线程

    状态

    TaskStatus.Created初始状态

    .WaitingForActivation依赖其他任务的任务的初始状态

    .WaitingToRun通过TaskFactory.StartNew所创建的任务的初始状态

    .Cancelled

    .Faulted

    .RunToCompletion

    task.Start()

    task.Wait() 等待也都有超时的重载

    Task.WaitAll()

    Task.TaskFactory.StartNew方法可以参数传入cancellationToken,或者TaskCreationOptions

    TaskCreationOption

    .AttachedToParent与一个父任务关联

    .None默认行为

    .LongRunning长时间操作,调度器可对其用粗颗粒度的操作,一般大于一秒

    .PreferFairness告诉调度器,更早被调度的任务更早执行

    task.ContinueWith延续任务

    TaskContinuationOptions操作或者条件

  • 相关阅读:
    gitlab使用
    小程序顶部导航栏标题不居中
    mpvue中使用vant-weapp
    原生js实现轮播图
    vue无法检测数组的变动
    vue报错TypeError: Cannot read property of undefined 或 Uncaught TypeError: this.myMethod is not a function
    vue绑定style使用需要添加浏览器引擎前缀的 CSS 属性
    《孙子算经》之"物不知数"题:中国剩余定理
    Java大数处理类:BigInteger类和BigDecimal类
    【转】操作系统典型调度算法
  • 原文地址:https://www.cnblogs.com/DexterDi/p/4185968.html
Copyright © 2011-2022 走看看