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用于指定无限长时间的常数

TPL相关的更多相关文章

  1. 嵌入式单片机STM32应用技术(课本)

    目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...

  2. phpcms 移植【添加相关文章】功能

    添加相关文章功能相当有用,移植一个过来基本上可以实现比较复杂的页面内包含分类功能,做二次开发时可以省下不少力气. 用例:如果一个产品,属于一个厂家,而这个厂家是动态添加的,既不是一个分类,而是一个厂家 ...

  3. Erlang使用相关笔记

    #从源码编译安装Erlang 1. wget http://www.erlang.org/download/otp_src_r16b.tar.gz -p /usr/local/src 2. tar z ...

  4. SQL语言和DML相关操作以及相应的运算符

    SQL 1.结构化查询语言 2.特点 a.第四代编程语言,更接近自然语言 b必须有数据库系统解释执行 c.对象名,关键字不区分大小写 d.字符串必须要用单引号引起来,不能用双引号 e.每条语句最后用分 ...

  5. TPL(Task Parallel Library)多线程、并发功能

    The Task Parallel Library (TPL) is a set of public types and APIs in the System.Threading and System ...

  6. TPL异步并行编程之简单使用

    并行编程一直是一个老生常谈的话题 在这里记录一下TPL编程,这在net4.0 微软就已经提供了多核时代下的并行库,其中最核心的最常用的也就是Task 一 Task是什么 Task可以简单的理解为一个线 ...

  7. 数据流(任务并行库 TPL)

    TPL 数据流库向具有高吞吐量和低滞后时间的占用大量 CPU 和 I/O 操作的应用程序的并行化和消息传递提供了基础. 它还能显式控制缓存数据的方式以及在系统中移动的方式. 为了更好地了解数据流编程模 ...

  8. c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习

    c#中@标志的作用   参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...

  9. TPL DataFlow初探(二)

    上一篇简单的介绍了TDF提供的一些Block,通过对这些Block配置和组合,可以满足很多的数据处理的场景.这一篇将继续介绍与这些Block配置的相关类,和挖掘一些高级功能. 在一些Block的构造函 ...

随机推荐

  1. Socket 学习(三).2 udp 穿透 服务端 与 客户端 通讯

    之前演示的 是 局域网通讯,也可以用作服务器之间的通讯,不能穿透. 想要穿透就要用 udp 了, 后续再讲解 udp 打洞 . 客户端: using System; using System.Wind ...

  2. C# WebBrowser 代理的使用

    原文:C# WebBrowser 代理的使用 The WebBrowser control is just an embeddded IE Control, I believe any setting ...

  3. IOS中 init和initialize

    一.init和initialize 1.方法类型 1> init属于对象方法,-开头 2> initialize属于类方法,+开头 2.调用时刻 1> init:每个对象初始化的时候 ...

  4. sp.Net MVC4 + Oracle + EasyUI + Bootstrap2

    Asp.Net MVC4 + Oracle + EasyUI + Bootstrap 第二章   Asp.Net MVC4 + Oracle + EasyUI + Bootstrap 第二章 --使用 ...

  5. sudo找不到npm的解决办法及及使用cnpm加速[已解决]

    sudo ln -s /usr/local/bin/node /usr/bin/node sudo ln -s /usr/local/lib/node /usr/lib/node sudo ln -s ...

  6. 大批量烧写openwrt系统

    http://wiki.openwrt.org/toh/tp-link/tl-wr1043nd OEM mass flashing Flashing hundreds of devices using ...

  7. 在VirtualBox下安装CentOS教程(截图版)

    http://blog.csdn.net/kobe_lzq/article/details/7894718 使用的软件: VirtualBox 4.1.2 CentOS 5.6 x86_64  刻录的 ...

  8. Mysql 使用 select into outfile

    Mysql支持将查询结果到处 默认语法 select .. from table  into outfile "filepath\filename.txt"; 如果在执行的过程中遇 ...

  9. DynamicResource与StaticResource的区别

    原文:DynamicResource与StaticResource的区别 2008-06-20 12:16:12 静态资源在第一次编译后即确定其对象或值,之后不能对其进行修改.动态资源则是在运行时决定 ...

  10. INSTEAD OF触发器

    Oracle触发器5(INSTEAD OF触发器) 前提:对于简单的视图,可以直接进行DML操作,但是对于复杂视图,不允许直接执行DML操作,当视图符合以下任何一种情况都不可以: 具有集合操作符(UN ...