为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

这个思路还是没太明白。

正在回答

4 回答

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


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

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

匪曰思存 提问者

HashSet的竞争跟a的竞争之间会差很多吗
2020-03-17 回复 有任何疑惑可以回复我~

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

2 回复 有任何疑惑可以回复我~
#1

匪曰思存 提问者

HashSet的竞争跟a的竞争之间会差很多吗
2020-03-17 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信