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

本文介绍了使用C#进行并行编程的一些实用技巧,包括如何使用CancellationToken实现周期性定时任务,不同同步元的选择与应用场合,TaskScheduler的用途,以及如何通过ThreadLocalStorage和数据分块模式(chunking partitioner)提高并行程序的性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《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])(非常重量级)
允许多个读者读写锁

 

同步元说明
lockSystem.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)的开销。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值