《Pro .Net 4 Parallel Programming in C#》笔记

《Pro .Net 4 Parallel Programming in C#》笔记

$ 周期性定时任务用

CancellationToken.WaitHandle.WaitOne(TimeSpan)

 特点:如果Task被Cancel,WaitOne马上就会返回。

 

$ 同步元

同步元选择
场景 解决方案
串行访问边界区域 lock关键字或System.Threading.Monitor或System.Threading.SpinLock
增加或减少数值 System.Threading.Mutex
跨进程同步 System.Threading.Mutex
多个锁的同步 Threading.WaitHandle.WaitAll()
同步类中的所有方法 声明式的同步([Synchronization])(非常重量级)
允许多个读者 读写锁

 

同步元说明
lock System.Threading.Monitor的缩写形式,重量级
System.Threading.Barrier 预先设定信号数量,有足够信号量后继续执行。自动重置
System.Threading.CountdownEvent 类似Barrier,但是需要主动重置
System.Threading.ManualResetEventSlim 类似CountdownEvent,但是不设定信号数量,一旦Set,所有等待线程被释放
System.Threading.AutoResetEvent 类似ManualResetEventSlim,但自动重置,每次Set只释放一个等待线程,不能使用CancellationToken等待,不保证哪个线程被释放
System.Threading.SemaphoreSlim 类似AutoResetEvent,同样不保证哪个线程被释放,但可以指定每次Set所释放的线程数,可以用CancellationToken等待

$ TaskScheduler用于指定由哪个线程执行Task,以及并发Task的数量和顺序

$ 利用Thread Local Storage(TLS,Parallel.For) 可减少对竞态数据的访问,只在每个分支线程结束时访问,从而提高性能。

$ 当操作很简单时,可以通过指定数据的分块模式(chunking partitioner),来降低调用委托(delegate)的开销。

猜你喜欢

转载自pre.iteye.com/blog/2364013