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操作或者条件

  • 相关阅读:
    Nginx Record
    Go 查找元素
    博客转移公告
    模板库
    模板库
    【BZOJ2276】Temperature
    【BZOJ3524】Couriers
    【BZOJ4458】GTY的OJ
    AtCoder Grand Contest 007
    Editing 2011-2012 ACM-ICPC Northeastern European Regional Contest (NEERC 11)
  • 原文地址:https://www.cnblogs.com/DexterDi/p/4185968.html
Copyright © 2011-2022 走看看