获得徽章 24
掘金技术团队
齐舞647
VIP.5 如鱼得水
关注了
工程师 @掘金
赞了这篇沸点
多线程中的栅栏 barrier 是什么?

先说点背景知识,iOS 开发中经常会用队列来调度 block 的执行,并发队列支持多个 block 同时执行(只要开多几个线程),串行队列让 block 只能一个一个执行,一个 block 执行完,另一个 block 才能开始。

栅栏函数就是用在并发队列中的,为的就是在并发队列中拿一点先后顺序。因为栅栏函数分配的 block A,会等这个队列中其他 block 执行完,然后到 blockA 单独执行,它执行完,然后才是队列其他中排在它后面的 block 执行。
这就相当于在无序的并发队列中拿到了一点「顺序」。

这么做的原因就是最大程度利用系统性能,顺序不敏感的 block 直接放进去,开多几个线程一起执行,对顺序有要求的 block 我就用栅栏函数放进去

图为 AFNetworking 图片下载器中添加图片缓存的逻辑,就用到了 barrier 来保证「添加图片」和「删除图片」的先后顺序[呲牙]

#每天一个知识点#
展开
跳入西湖于2024-03-22 10:46发布的图片
评论
赞了这篇沸点
SDWebimage 如何设计缓存?

memory + disk 内存+磁盘双缓存。
获取图片前先查找这两个缓存里有没有,内存里没有就去磁盘找,磁盘里没有才下载,如果磁盘里有,那么就会把磁盘缓存 copy 到内存缓存 _syncDiskToMemoryWithImage

什么时候添加缓存?
图片下载后,根据缓存策略(默认是都存)
把 UIImage 存到NSCache 中
同时也会把压缩格式的 图片存到本地沙盒

什么时候清理缓存?
内存:收到内存预警时,删除所有内存
磁盘:App 退出或者进入后台时,会检查当前缓存是否超出了maxDiskSize (默认无限额,需要开发者手动设置),或者存储的缓存数据是否过期(保质期默认 7 天 kDefaultCacheMaxDiskAge)。如果超出了,那也不是删除全部,而是把图片删除到 maxDiskSize 的一半

很合理,收工的时候清理一下,还手机一个干净整洁的空间
(真的很舒服啊 SDWebimage 的源码看着,虽然看不太懂,但是整洁、齐全、有注释,结构合理)


#每天一个知识点#
展开
评论
赞了这篇沸点
同步和异步的区别是什么?
异步基于 JS 是单线程语言,只能同时做一件事
JS 和 DOM 渲染共用同一个线程,因为 JS 可以修改 DOM 结构
异步不会阻塞代码执行
同步会阻塞代码执行
1
赞了这篇沸点
@隔壁老王 我是男的,也想过三八妇女节怎么办?
28
赞了这篇沸点
@掘金 “今天下雨,我骑车差点摔倒, 好在我一把把把把住了” 这句话里的“把”要怎么理解呢?
36
赞了这篇沸点
@掘金 给我讲个能笑一个礼拜的笑话
82
@猫咪百科 加菲猫与其他猫有什么不同?
3
@掘金 给我推荐一些今天掘金热门的后端文章
6
@掘金 你好,你有什么功能?
13
齐舞647
VIP.5 如鱼得水
关注了
工程师 @掘金
赞了这篇沸点
哈哈,问一个搞笑的问题,你们要严肃的回答,在座的各位你们的理想是什么?
513
赞了这篇沸点
#每日快讯#
①:3月11日开启全国交付 理想MEGA正式下线
②:雷军建言智能驾驶规范,绿色制造引领未来
③:奇瑞四大品牌整车终身质保 比亚迪元PLUS荣耀版上市
④:阿维塔11OTA升级,开启智能驾驶新篇章
⑤:何小鹏两会建议:推动飞行汽车的应用
展开
2
下一页
个人成就
2022年度人气作者No.32
文章被点赞 917
文章被阅读 151,906
掘力值 5,080
掘金技术团队
收藏集
7
关注标签
38
加入于