TLS(Thread Local Storage)
TLS就是线程局部存储,是操作系统为线程单独提供的私有空间,能存储只属于当前线程的⼀些数
据
StripedMap
StripedMap 的主要作⽤是⽤来缓存 带spinlock锁能⼒的类或者结构体 。
它的⼯作原理是什么呢?⽐如说这个SyncList,我们想⼀下,如果说系统在全局只初始化⼀张
SyncList⽤来管理所有对象的加锁和解锁操作,其实也是可以。只是,效率会很慢,因为每个对象
在操作这个表的时候,都需要等待其他对象操作完解锁之后才能进⾏。或者说,系统为每⼀个对象
都创建⼀个SyncList,其实也是可以的,只是内存的消耗会⾮常⼤。
所以,苹果就⽤这个 StripedMap 来解决这个问题,提前准备⼀定个数的 SyncList 放这⾥,然后
在调⽤的时候均匀的进⾏分配。
单向链表
单向链表(Linkedlist)是⼀种常⻅的基础数据结构,数据元素的逻辑顺序是通过链表中的指针链接
次序实现的,链表由⼀连串节点组成,每个节点保存数据和到下⼀个节点的地址。单向链表只能向
⼀个⽅向遍历。
@synchronized的底层原理
核⼼图:
整体思路就是:@synchronize针对某个对象,也就是我们给@synchronize传的参数,每⼀条线程
都有⼀把递归锁,⽽且记录了每条线程加锁的次数,这样就能通过这俩点,对每条线程⽤不同的递
归锁来进⾏加锁和解锁的的操作,从⽽达到多线程递归调⽤的⽬的。
block的类型
block有三种类型:堆block,栈block,全局block。
对于这三种类型的block遵循俩个原则:
block如果没有使⽤外部变量,或者只使⽤静态变量和全局变量,那⼀定是全局blcok。
block如果使⽤了外部变量,⽽且不是静态变量或全局变量,如果赋值给强引⽤的是堆block,
如果赋值给弱引⽤的是栈blcok。
为什么block要⽤copy关键字修饰
因为block在创建的时候,它的内存是分配在栈上的,⽽不是在堆上。栈区的特点是:对象随时有
可能被销毁,⼀旦被销毁,在调⽤的时候,就会造成系统的崩溃。所以我们要使⽤copy把它拷⻉
到堆上。在ARC下, 对于block使⽤copy与strong其实都⼀样, 因为block的retain就是⽤copy来实现
的, 所以在ARC下 block使⽤ copy 和 strong 都可以。