惊:FastThreadLocal吞吐量居然是ThreadLocal的3倍!!! (4)

惊:FastThreadLocal吞吐量居然是ThreadLocal的3倍!!!


惊:FastThreadLocal吞吐量居然是ThreadLocal的3倍!!!

FastThreadLocal为什么快?

FastThreadLocal操作元素的时候,使用常量下标在数组中进行定位元素来替代ThreadLocal通过哈希和哈希表,这个改动特别在频繁使用的时候,效果更加显著!计算该ThreadLocal需要存储的位置是通过hash算法确定位置:
int i = key.threadLocalHashCode & (len-1);而FastThreadLocal就是一个常量下标index,这个如果执行次数很多也是有影响的。

并且FastThreadLocal利用缓存行的特性,FastThreadLocal是通过indexedVariables数组进行存储数据的,如果有多个FastThreadLocal的时候,也可以利用缓存行,比如一次indexedVariables数组第3个位置数据,由于缓存的最小单位是缓存行,顺便把后面的4、5、6等也缓存了,下次刚刚好改线程需要读取另外的FastThreadLocal,这个FastThreadLocal的下标就是5的时候,进行读取的时候就直接走缓存了,比走主存可能快2个数量级而ThreadLocal通过hash是分散的。

如果读完觉得有收获的话,欢迎点赞、关注、加公众号 [匠心零度] ,查阅更多精彩历史!!!

惊:FastThreadLocal吞吐量居然是ThreadLocal的3倍!!!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsfxyf.html