
获得徽章 24
掘金技术团队
- 多线程中的栅栏 barrier 是什么?
先说点背景知识,iOS 开发中经常会用队列来调度 block 的执行,并发队列支持多个 block 同时执行(只要开多几个线程),串行队列让 block 只能一个一个执行,一个 block 执行完,另一个 block 才能开始。
栅栏函数就是用在并发队列中的,为的就是在并发队列中拿一点先后顺序。因为栅栏函数分配的 block A,会等这个队列中其他 block 执行完,然后到 blockA 单独执行,它执行完,然后才是队列其他中排在它后面的 block 执行。
这就相当于在无序的并发队列中拿到了一点「顺序」。
这么做的原因就是最大程度利用系统性能,顺序不敏感的 block 直接放进去,开多几个线程一起执行,对顺序有要求的 block 我就用栅栏函数放进去
图为 AFNetworking 图片下载器中添加图片缓存的逻辑,就用到了 barrier 来保证「添加图片」和「删除图片」的先后顺序
#每天一个知识点#展开评论2 - SDWebimage 如何设计缓存?
memory + disk 内存+磁盘双缓存。
获取图片前先查找这两个缓存里有没有,内存里没有就去磁盘找,磁盘里没有才下载,如果磁盘里有,那么就会把磁盘缓存 copy 到内存缓存 _syncDiskToMemoryWithImage
什么时候添加缓存?
图片下载后,根据缓存策略(默认是都存)
把 UIImage 存到NSCache 中
同时也会把压缩格式的 图片存到本地沙盒
什么时候清理缓存?
内存:收到内存预警时,删除所有内存
磁盘:App 退出或者进入后台时,会检查当前缓存是否超出了maxDiskSize (默认无限额,需要开发者手动设置),或者存储的缓存数据是否过期(保质期默认 7 天 kDefaultCacheMaxDiskAge)。如果超出了,那也不是删除全部,而是把图片删除到 maxDiskSize 的一半
很合理,收工的时候清理一下,还手机一个干净整洁的空间
(真的很舒服啊 SDWebimage 的源码看着,虽然看不太懂,但是整洁、齐全、有注释,结构合理)
#每天一个知识点#展开评论3 - #大模型日报# Google 推出Gemma模型
这是一款轻量级、先进的开源模型,供开发者和研究人员用于AI构建。
Gemma模型家族包括Gemma 2B和Gemma 7B两种尺寸,
能够在不同的设备类型上运行,包括笔记本电脑、桌面电脑、IoT设备、移动设备和云端。
性能和设计
Gemma模型在技术和基础设施组件上与Gemini共享,这使得Gemma 2B和7B在其大小范围内相比其他开放模型具有最佳性能。
Gemma模型不仅可以直接在开发者的笔记本电脑或桌面电脑上运行,而且在关键基准测试中的表现超过了更大的模型,同时遵循严格的安全和负责任输出标准。
主要特点:
1、轻量级、高性能模型:Gemma模型家族包括Gemma 2B和Gemma 7B两种尺寸,提供预训练和指令调优的变体,针对其大小范围内相比其他开放模型具有最佳性能。
2、跨框架工具链支持:支持JAX、PyTorch和TensorFlow通过原生Keras 3.0进行推理和监督式微调(SFT),适应多种开发需求和环境。
3、易于入门和集成:提供准备就绪的Colab和Kaggle笔记本,以及与Hugging Face、MaxText、NVIDIA NeMo和TensorRT-LLM等流行工具的集成,方便开发者快速上手。
4.高效的运算能力:针对多个AI硬件平台上进行优化,确保在NVIDIA GPU和Google Cloud TPU上的行业领先性能。通过与NVIDIA的合作,无论是在数据中心、云端还是本地RTX AI PC上,都确保了行业领先的性能和与尖端技术的集成。
Gemma模型能够在不同的设备类型上运行,包括笔记本电脑、桌面电脑、IoT设备、移动设备和云端。这种广泛的兼容性使得模型能够适应各种应用场景和需求。
详细:t.co
访问:t.co
展开2829