007 线程风险
Posted trekxu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了007 线程风险相关的知识,希望对你有一定的参考价值。
一 . 概述
多线程可以帮助我们实现并发,但是并发会带来一些问题.
[1]线程安全问题
[2]活跃问题
[3]性能问题
二 . 活跃性问题
常见的活跃性问题有:
[1]死锁 :
经典的死锁问题有哲学家问题,当出现死锁的时候,程序就无法继续运行了.
出现死锁问题的主要原因就是:
仅仅获取部分资源,但是不会放弃当前的资源.
[2]饥饿
由于线程优先级的问题.有的线程可能很久都不会运行一次.
经典的问题: 高优先级的线程长时间占用时间片,其他的低优先级的线程就被饿死了.
[3]活锁
经典的问题:
两个线程互相谦让资源,但是没有放弃的资源之后又获取了其它的资源.
比如说让路的问题.
活锁比死锁要危害大很多,也不容易进行检测.
死锁检测:
我们可以使用工具来进行死锁的检测,但是对于饥饿和活锁就很难检测了.
三 . 性能问题
多线程的并发的根本是时间片在切换,但是时间片的切换是需要时间的.
当切换时间片花费了更多的时间之后,原先都给程序正常运行的资源都被时间片切换
使用了,那么性能就会出现问题.
性能的问题的核心就是:
确定是否需要并发,多少并发量,并发的时间的花费.
四 .安全问题
当多线程执行时,会发生资源的争夺问题,如果控制不当,那么就会出现错误的结果.
这就是线程安全问题.
安全问题的解决:
使用线程同步来解决该问题.
以上是关于007 线程风险的主要内容,如果未能解决你的问题,请参考以下文章
回炉重造之重读Windows核心编程-007-线程的调度优先级与亲缘性