A、为什么内存管理,不用一个sideTable,而是用多个。(非嵌入式64个)
因为针对所有的对象创建、操作,可能是在不同的线程中进行,那么对sideTable进行操作时,需要对sideTable进行加锁处理,才能保证对于数据的访问安全。
那么,如果所有数据都放在一张表里面,就会出现效率问题。也就是说,如果有对象在操作这张表,那么下一个对象就要等此对象操作完之后再访问这张表。
因此,苹果引入了分离锁的概念,也就是把对象的信息(引用计数表、弱引用表)分拆成多个表,这样如果有两个对象a、b,分别属于不同的表,那么就可以并发进行操作。(当然,如果同属于一张表还是顺序操作)这样就提高了访问效率。
上面也就是sideTable里面自旋锁的作用。当前锁如果已被其他线程获取,那当前线程就会不断探测这个锁是否有被释放,如果释放了就第一时间去获取这个锁。而将sideTable分为多个表,提升了效率,显示出了自旋锁的特点:轻量访问。
分离锁 sideTable里面的自旋锁B、如何实现快速分流
使用hash查找
hash算法 sideTable使用hash算法
网友评论