为啥大面积变小面积了,为啥这里就不会有很大的性能开销

来源:2-5 ThreadLocal场景分析——减少同步

匪曰思存

2020-02-07 15:37

原来是把a++这个操作同步起来

现在这个操作,好像也没有简化很多。

这个思路还是没太明白。

写回答 关注

4回答

  • 求老仙
    2020-02-21 02:07:25
    已采纳

    锁发生在寄存器里是很快的,锁发生在内存里要看(如果发生在CPU的L1 cache上,就很快),如果发生在L2,L3或者内存里就慢很多;锁如果发生在IO上(比如读硬盘就非常慢)。所以缩小范围,要看缩小了什么,如果缩小了I/O,那就非常有必要了。 我用Sleep(I/O),所谓I/O就是触发中断的东西,来替代真实的I/O场景(比如读数据库,读redis等)。


    寄存器速度约等于(l1),< l2, < l3  <<<<< 内存(这里大概有几十倍到百倍速度差距了) <<<<<<  固态硬盘(和内存间有百倍到千倍差距) <<<<<< 机械硬盘(和内存比大概有十万到百万倍差距)。。

  • 梦里花落4
    2020-03-17 01:22:01

    阿里大神的思考,值得学习

  • 慕斯卡6586063
    2020-02-26 11:37:32

    原来的a是临界资源,所有的线程都要去争夺临界资源,就会发生排队。用了ThreadLocal之后每个线程都有一份线程本地资源,避免了多线程的排队竞争

    匪曰思存

    HashSet的竞争跟a的竞争之间会差很多吗

    2020-03-17 14:37:22

    共 1 条回复 >

  • Eri1c
    2020-02-08 15:31:56

    原先是只要有线程并发就排队,现在是不同线程间通过ThreadLocal进行资源隔离,就无须排队了,因为根本产生不了竞争,唯一的竞争就在那个共享的HashSet上,所以给add()操作同步一下就好了。缩小了原来的同步范围

    匪曰思存

    HashSet的竞争跟a的竞争之间会差很多吗

    2020-03-17 14:37:15

    共 1 条回复 >

ThreadLocal

设计者视角源码级ThreadLocal分析教你建立线程安全感-你专属的技术优越感

14065 学习 · 32 问题

查看课程

相似问题