TLS StripedMap

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 都可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值