美文网首页
高并发相关

高并发相关

作者: 榷奕 | 来源:发表于2019-09-27 16:02 被阅读0次

    1. 多线程和单线程比较

    (1) 单线程是顺序运行的,运行起来结果是可控的,在运行的一瞬间就已经知道了运行出来的结果。
    多线程是一起跑的,没有已知的先后顺序,近乎于完全随机,所以结果并不可控。
    线程安全就是即便是在多线程运行下,也能够保证结果的绝对确定。

    (2) 加锁和线程同步
    实际上加锁线程同步等各种手段,就是把多线程用某种方式变成单线程,把不确定的执行路线变成一条确定的路径。(执行路径的两条线就变成了一条线)
    而利用加锁带来的问题,就在于:原来多线程是用来加速的,结果你给变成单线程了,安全倒是安全了,就是慢了不少。

    解决
    首先是控制加锁的持有时间,跟公共资源不沾边的一概不管,前置后置通通不管。
    减小锁的粒度,管理的事情尽可能减少,一个电影院有两个电影,复仇者联盟和侏罗纪世界,买票的时候尽量一个电影一个锁,各管各的。
    锁分离,对读写锁进行分离,如果是读的话可以多个线程去读取,如果写的话只能一个线程去写,这种。

    锁种类:



    公平锁就是大家一起排队,谁先来就先轮到谁。
    不公平锁就是插队的,乐观锁形式,谁抢到了归谁,抢到了的自己锁上。
    CAS就是这种乐观锁,利用一系列的处理器指令,性能很好。但是CAS只适用于几个线程排队的情况,如果很多个线程共同竞争比如一千个,那么大多数线程其实是获得不到锁的,它是利用循环不断地重复一切的操作,各种前置全都重复执行一遍直到获得锁,对CPU占用很高的。如果是synchronized操作那么CPU会把锁挂起,然后其他线程就只重复执行获得锁这一个操作,对CPU利用率就低了。

    2. 分布式锁

    相关文章

      网友评论

          本文标题:高并发相关

          本文链接:https://www.haomeiwen.com/subject/njjqjctx.html