利用多线程处理问题心得----处理并发程序

当利用多线程处理程序时,共有资源就是各个线程抢占的对象,处理加锁问题总结几点:

现象:

多线程抢占临界资源,会导致程序阻塞,影响效率如图:


经验和原因:

1. 能不加锁的地方,就不加锁,因为多线程同时抢占一个锁会发生阻塞,影响多线程的效率,而且处理不当会发生死锁

2. 被锁资源和代码段能短就尽量短,能用原子锁就用原子锁,被锁代码段如果很长的话,也就是被锁住的资源会很大,这样同一时间只允许一个线程占有他,这样对多线程而言效率被降低了很多,就像地铁门口的关卡一样,堵住了许多人,浪费了许多人的时间,程序也是一样,所以,让临界区尽量的小,保证程序的高效性

3. 选择锁时要慎重,根据需要,是选择互斥锁、信号量、还是事件锁。选择不当不但会会造成程序资源浪费,而且达不到预期的效果,所以选择锁之前要考虑再三。例如有限个资源可以用信号量,需要长时间等待的就用事件锁,单一资源用互斥锁

4. 多线程打印日志要加线程id,不然你不知道代码是哪个线程执行的

5. 处理同一个问题的多线程操作可以利用线程池,特别是处理生产者消费者问题时,特别是消费者处理比较慢的情况,这样不仅可以省去处理等待的时间,而且加快处理的速度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值