
費曼學(xué)習(xí)法的精髓在于用自己的語言把學(xué)習(xí)的知識給他人講懂
下面有一些問題,并附有答案和對該知識點的詳解,如果你能用自己的語言把該問題講解清楚,那恭喜你,該知識點你掌握了!
1. 你了解Netty的FastThreadLocal嗎?它為什么比JDK的ThreadLocal更快?
FastThreadLocal是Netty中的類,它比JDK中的ThreadLocal速度更快。我們知道,JDK中的ThreadLocal在每一個線程中通過一個ThreadLocalMap來維護(hù)ThreadLocal
到Object的映射關(guān)系,這個Map采用了哈希法散列、線性探索法解決沖突,因此在最壞情況下其時間復(fù)雜度可能為O(n)。
FastThreadLocal通過以空間換時間的方式改良了上述問題,每一個FastThreadLocal都有一個全局唯一的index,在FastThreadLocalThread中也是維護(hù)了一個數(shù)組,F(xiàn)astThreadLocal就存儲在該數(shù)組的index下標(biāo)處,因此總是能夠在O(1)的時間內(nèi)訪問相應(yīng)的FastThreadLocal。不過,這種方法的缺陷是可能會極大的浪費空間,例如某個FastThreadLocal的index很大,某個FastThreadLocalThread只使用了該FastThreadLocal一個共享變量,但也不得不開辟index大小的數(shù)組。
詳細(xì)原理戳這里:Netty中FastThreadLocal的實現(xiàn)原理
【長期更新中......】