实习总结:c#开发之旅(三)多线程小结(一)

本文讲述了作者在C#项目中使用多线程遇到的挑战,包括性能提升不明显、线程安全问题以及线程控制的复杂性。作者提到,多线程适合处理耗时等待任务,但在此数据管理系统中,由于任务的非原子化和大量全局变量使用,导致并发冲突。此外,尝试使用Thread.Suspend和Resume进行线程控制出现了问题,MSDN建议避免依赖线程状态进行同步。
摘要由CSDN通过智能技术生成

      由于子系统中的任务,需要处理的数据量比较大,为了提高系统工作效率,老大要求使用多线程来执行任务,而我刚好负责流程控制这一块,当时真是被多线程折腾的死去活来,这个系统其实是有原型可以参考的,而且这个原型系统是久经考验,稳定性也很高;所以老大给我的时间并不多,我当时也没意识到难度会如此之大,但原型使用的是单线程,很多模块在单线程下跑得很欢,一到多线程就各种难了。

其实现在想来,使用多线程并行处理数据,真心不算个好的决定。

多线程适合处理的任务性质多为耗时的等待,或轮询判断状态。而此数据管理系统的瓶颈却是cpu运算和硬盘数据传输速度,后来测试结果也显示,多线程对性能的提升并不算太明显。当然这个不是主要原因,如果把系统布在强大的服务器上,性能提升还是有的。

更主要的原因是:数据处理任务太不原子化了(额 不知道原子化的反义词是什么),线程安全程度非常低。详细说明下就是,任务执行的过程中,和太多其他模块有太多的交互了,而且大量使用了全局变量(比如处理任务需要的各种参数、配置、执行方案)和静态变量(数据库操作类的静态实例),一旦跑起多线程,就各种并发冲突。当时我又没有很清晰的意识到这个问题,于是到处加锁,在dal入口加锁,在任务存取数据的地方加锁,在使用DBHelper的静态对象地方加锁,搞得这部分异常复杂,而且加太多锁的后果就是性能进一步的下降,搞得几乎和单线程效率差不多了。

额,说了半天废话&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值