007 线程风险

一 . 概述

多线程可以帮助我们实现并发,但是并发会带来一些问题.

[1]线程安全问题

[2]活跃问题

[3]性能问题


二 . 活跃性问题

常见的活跃性问题有:

[1]死锁 :

  经典的死锁问题有哲学家问题,当出现死锁的时候,程序就无法继续运行了.

    出现死锁问题的主要原因就是:

        仅仅获取部分资源,但是不会放弃当前的资源.

[2]饥饿

  由于线程优先级的问题.有的线程可能很久都不会运行一次.

    经典的问题: 高优先级的线程长时间占用时间片,其他的低优先级的线程就被饿死了.

[3]活锁

  经典的问题:

    两个线程互相谦让资源,但是没有放弃的资源之后又获取了其它的资源.

      比如说让路的问题.

    活锁比死锁要危害大很多,也不容易进行检测.

死锁检测:

  我们可以使用工具来进行死锁的检测,但是对于饥饿和活锁就很难检测了.


三 . 性能问题

  多线程的并发的根本是时间片在切换,但是时间片的切换是需要时间的.

    当切换时间片花费了更多的时间之后,原先都给程序正常运行的资源都被时间片切换

      使用了,那么性能就会出现问题.

  性能的问题的核心就是:

    确定是否需要并发,多少并发量,并发的时间的花费.


四 .安全问题

  当多线程执行时,会发生资源的争夺问题,如果控制不当,那么就会出现错误的结果.

    这就是线程安全问题.

  安全问题的解决:

      使用线程同步来解决该问题.

猜你喜欢

转载自www.cnblogs.com/trekxu/p/8975609.html
007