tcmalloc锁粒度

ThreadCache

TCMalloc减少了多线程程序中的锁争用情况。对于小对象,因为ThreadCache,每个线程对小对象的获取直接从该线程的ThreadCache获取,几乎已经达到了零争用。但当ThreadCache中的可用空间用完后,还是会需要向CentralCache申请空间。CentralCache全局只有一个,这时候需要锁了,因为可能会有多个ThreadCache向CentralCache申请空间对于大对象,TCMalloc尝试使用粒度较好和有效的自旋锁,也就是pageheap对应的锁。

CentralCache

CentralCache里面有多个CentralFreeList,针对每一种class的object。每一个CentralFreeList内有一把自旋锁。ThreadCache向CentralCache申请空间时只需要对需要的CentralFreeList加锁。

PageHeap

PageHeap也对应着一把锁,虽然PageHeap类内并未见该锁,该锁在class Static内一把名为pageheap_lock_的自旋锁。在向pageheap申请或释放span时,均需要对该锁进行加锁。

疑问?为啥pageheap的锁粒度不能在细一点呢,比如每一个span链表对应一把自旋锁。

是因为对pageheap申请或释放span频率比较低,锁粒度更细并不会带来多大效果?

你可能感兴趣的:(tcmalloc源码分析)