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. linux_常用压缩,解压缩命令

    01-.tar格式解包:[*******]$ tar xvf FileName.tar打包:[*******]$ tar cvf FileName.tar DirName(注:tar是打包,不是压缩! ...

  2. axure团队合作开发原型图

    谁是人画或其他原型图的头,但在基本制度的发展时,.我们分配一些人画的原型,其他部分干. 再画一个原型不再是一个人画,一起画,假设大家都各自画自己那一部分.最后再由一个人来整合的画.是非常麻烦. 咱平时 ...

  3. CentOS修改用户密码方法

    CentOS修改用户密码方法 CentOS修改用户密码方法 1. 普通用户 a. 获取超级用户root权限 命令:su或者su -或者su - root b. passwd 用户名 2. 超级用户 a ...

  4. HDU Redraw Beautiful Drawings 推断最大流是否唯一解

    点击打开链接 Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 ...

  5. struts2 通配符简化配置

    在struts映射中反复出现的模式 动作方法 描写叙述 下一个动作方法 add 为save准备网页 save save 提交INSERT list edit 为update准备网页 update up ...

  6. ResultSet取结果集多少条记录方法及分页概要

    allst=toconn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); allsql = ...

  7. java之JAVA异常

    异常的分类 1. 编译时被检测异常:只要是Exception和其子类都是,除了特殊子类RuntimeException体系.         此类异常在处理时必须进行声明或进行捕捉         这 ...

  8. MVC+Bootstrap设计

    MVC+Bootstrap) 二 框架设计 文章目录: 一.前言 二.结构图 三.项目搭建 四.代码生成 五.实现接口 六.依赖倒置 七.登录实现 八.最后 一.前言 这个框架是从最近几年做过的项目中 ...

  9. 记录一下Fedora21下安装Foundation5遇到的问题[尚有遗留问题]

    写在前面:之前安装过了gem,所以下面的步骤没有这一过程,再有就是忘记哪一步需要ruby中的一个.h文件.可以使用如下命令解决 sudo yum install ruby-devel ------ S ...

  10. Windows 8.1 store app 开发笔记

    原文:Windows 8.1 store app 开发笔记 零.简介 一切都要从博彦之星比赛说起.今年比赛的主题是使用Bing API(主要提到的有Bing Map API.Bing Translat ...