匪曰思存
2020-02-07 15:37
原来是把a++这个操作同步起来
现在这个操作,好像也没有简化很多。
这个思路还是没太明白。
锁发生在寄存器里是很快的,锁发生在内存里要看(如果发生在CPU的L1 cache上,就很快),如果发生在L2,L3或者内存里就慢很多;锁如果发生在IO上(比如读硬盘就非常慢)。所以缩小范围,要看缩小了什么,如果缩小了I/O,那就非常有必要了。 我用Sleep(I/O),所谓I/O就是触发中断的东西,来替代真实的I/O场景(比如读数据库,读redis等)。
寄存器速度约等于(l1),< l2, < l3 <<<<< 内存(这里大概有几十倍到百倍速度差距了) <<<<<< 固态硬盘(和内存间有百倍到千倍差距) <<<<<< 机械硬盘(和内存比大概有十万到百万倍差距)。。
阿里大神的思考,值得学习
原来的a是临界资源,所有的线程都要去争夺临界资源,就会发生排队。用了ThreadLocal之后每个线程都有一份线程本地资源,避免了多线程的排队竞争
原先是只要有线程并发就排队,现在是不同线程间通过ThreadLocal进行资源隔离,就无须排队了,因为根本产生不了竞争,唯一的竞争就在那个共享的HashSet上,所以给add()操作同步一下就好了。缩小了原来的同步范围
ThreadLocal
14065 学习 · 32 问题
相似问题