• TPL相关


    C#中的Timer

    System.Windows.Forms.Timer
    System.Threading.Timer

    System.Timers.Timer
    1.System.Windows.Forms.Timer在激发Timer.Trick的时候,其实是在主线程中执行的,所以可以用来更新所有的UI控件,而不用担心线程安全的问题。
    2.System.Threading.Timer和System.Timers.Timer都是基于ThreadPool的,每次执行Timer.Trick的时候都会基于ThreadPool创建一个线程,无法直接线程安全的操作主线程中控件。
     
    协调数据结构

    协调数据结构(Coordination Data Structures,CDS)被设计为在并发环境下使用的组件,它也可用于构建复杂的并发框架。此外,它还包含了高级的同步工具,如Barrier,多种线程安全的集合,以及多种构建Future模型的方式。

    Barrier类的作用是在多个阶段的操作之间创建同步点。在使用之前,Barrier需要知道有多少线程将会使用它。每个线程达到检查点时,便要调用Barrier的SignalAndWait方法。这么做会引起阻塞,当所有线程都调用了这个方法后,便会同时释放所有线程。这个过程可以重复多次,每个这样的迭代都会增加其CurrentPhaseNumber属性。用于监控的代码可以随时检查正在使用Barrier的线程,以及还没有到达检查点的线程数量。CurrentPhaseNumber为Int64类型,因此每个Barrier可以支持多达9,223,372,036,854,775,807个阶段(之前的beta版本使用Int32,因此受限于40亿个阶段)

    任务和数据并行

    Parallel.Invoke方法中需要指定确定action委托的数量,如果其数量小于逻辑内核数量的话,那么会有其他的内核空闲,所以该方法不能充分利用系统的内核。
    并行度:ParallelOptions类中设置,度数最好设置为Environment.ProcessorCount;
    创建新的任务并不一定要创建新的线程,创建新的任务能够从现有的线程中窃取工作,任务和线程并不存在一对一的关系。
    默认的任务调度器依赖于底层的线程池引擎。因此,在创建一个新任务时,调度器会使用工作窃取队列找到一个最合适的线程,然后将这个任务加入队列。任务中所包含的代码会在一个线程中运行;然而这一切都是在幕后进行的,其开销的确比手工创建线程的开销要小。
    ConcurrentQueue并行队列集合。
    ConcurrentStack并行栈,永远没有锁,也永远不会获取到锁的,可能会自旋并且重试操作。

     
    IProducerConsumerCollection<T>被上述集合类实现;
    BlockingCollection<T>实现了对IProducerConsumerCollection<T>实现类的包装,有上线和阻塞(block);
    BlockingCollection<T>默认封装的是ConcurrentQueue,如果要修改其封装的类型那么可以:
    var t=  new BlockingCollection<string>(new ConcurrentStack<string>(),100);红色参数为实现了IProducerConsumerCollection<T>接口的集合。
    ConcurrentDictionary是Dictionary的并行版本,是完全无锁的,当很多任务和线程添加或者修改数据的时候,ConcurrentDictionary会使用细粒度的锁,该类中有AddOrUpdate方法,如果存在该键值,就update,否则就add,也有GetOrAdd方法,如果键值存在就获取对应的Value,否则则加入其中新的键值对。也有相应的TryAdd,TryUpdate,TryRemove等方法。
     
    ConcurrentDictionary<T,T1>表示可以由多个线程同时访问的键值对的集合
    Thread.VolatileRead(ref ff)无论处理器的数目或者处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值
    Interlocked.Increment(ref this._connectionID)以原子操作的形式递增指定变量的值并存储结果
    Interlocked类为多个线程共享的变量提供原子操作;
    ConcurrentStack线程安全的Stack
    Timeout.Infinite用于指定无限长时间的常数
  • 相关阅读:
    2、函数
    二者取其一(初遇)_网络流
    P1879 [USACO06NOV]玉米田Corn Fields
    P2831 愤怒的小鸟
    P2296 寻找道路
    序(不知道是什么时候的模拟题)
    P2243 电路维修
    P1273 有线电视网
    P2613 【模板】有理数取余
    P1373 小a和uim之大逃离
  • 原文地址:https://www.cnblogs.com/Johnzhang/p/3593372.html
Copyright © 2020-2023  润新知