摸鱼精选第 5 期
1. 「现代 C++设计魅力」虚函数继承-thunk 技术初探
作者工作中使用 LLDB 调试器调试这一段 C++多继承程序的时候,发现通过 lldb print(expression 命令的别名) 命令获取的指针地址和实际理解的 C++的内存模型的地址不一样。然后通过 lldb 一步步分析汇编代码,验证了在指针类型转换的时候,编译器内部做了真实的地址偏移。
通过分析,我们得知编译器在函数调用时通过 thunk 技术动态调整入参 this 指针和返回值 this 指针,保证 C++调用时 this 的正确性;
在通过 LLDB expression 获取非虚函数基类指针内容时,LLDB 内部通过 summary format 进行格式化转换,格式化转化时会进行动态类型的获取。
2. C++智能指针-使用、避坑和实现
本文主要介绍以下内容:
- 智能指针的由来
- auto_ptr 为什么被废弃
- unique_ptr 的使用、特点以及实现
- shared_ptr 的使用、特点以及实现
- weak_ptr 的使用、特点以及实现
- 介绍作者在工作中遇到的一些职能指针相关的坑,并给出一些建议
3. 探索移动端音视频与 GSYVideoPlayer 之旅
作者从基础知识开始介绍封装、音频编码、视频编码,视频流 M3U8 和 RTSP。
接着重点介绍了作者开发的 GSYVideoPlayer,以及比较了 IJKPlayer、MediaPlayer 和 ExoPlayer 的区别。
最后列出了一些音视频开发中的常见问题。
4. 2021 年 Rust 生态调研报告 | 星辰大海 上篇 下篇
长篇巨著,分析了 Rust 当前的生态, 前景,应用,以及未来。
5. 腾讯自主研发动画组件 PAG 开源
官网网站:https://pag.io/ github 地址:https://github.com/Tencent/libpag
Lottie 的替代品,移动端、web 端、桌面端等全平台支持,尤其是在 web 端使用 webassembly,性能更好。
6. 新一代消息队列 Pulsar
Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性,被看作是云原生时代实时消息流传输、存储和计算最佳解决方案
Apache 的又一个 pub-sub 模型的消息队列的开源项目。本文对 Pulsar 的特性、机制、原理等进行整理总结。
7. 贝壳 B 端 iOS 包瘦身之路
作者从以下几个方面来优化包大小:
- 二进制优化
- 编译优化:
- 编译选项优化:- Link-Time Optimization: Incremental
- 编译指令优化:-Wl,-rename_section,**TEXT,**cstring,**RODATA,**cstring
- 无用/重复技术栈下线
- 无用的代码下线
- 重复代码下线
- 代码内部优化
- 编译优化:
- 资源优化
- 启动图使用 storyboard
- 无用图片删除,有工具 LSUnusedResources查找
- Assets 管理图⽚
- 资源压缩,比如大图转成 webp,图片用 iconFont,或者用 ImageOptim 和 tinypng,通常可以循环压缩
- 最重要的是图片放云端
8. Redis 线程模型的前世今生
作者是 vivo 互联网服务器团队,下面是文章概述:
我们从 IO 的起源开始,讲述了阻塞 IO、非阻塞 IO、多路复用 IO。基于多路复用 IO,我们也梳理了几种不同的 Reactor 模型,并分析了几种 Reactor 模型的优缺点。基于 Reactor 模型我们开始了 Redis 的 IO 模型和线程模型的分析,并总结出 Redis 线程模型的优点、缺点, 以及后续的 Redis 多线程模型方案。本文的重点是对 Redis 线程模型设计思想的梳理,捋顺了设计思想,就是一通百通的事了。
9. Flutter 疑难杂症系列:实现支持复杂需求的列表
作者是字节跳动终端技术团队的。
本文主要介绍了列表 Sliver 组件中的一些优化点及其大致实现原理,涉及到性能以及功能两个方面,列表场景中的另一个长期问题则是复杂场景下 NestedScrollView 中嵌套列表,手势传递,嵌套滑动、刷新等需求的实现,后续则会继续尝试治理这类问题,尝试输出通用方案。
10. 微信终端自研 C++协程框架设计与实现 1 2
非常值得深度研读的文章,对 C++ 协程 说的很深入。
虽然 C++ 20 新增了协程功能,但你的编译器未必有这么新,所以想要体验协程的魅力可以考虑这个思路。
11. Flutter 流畅度优化实践总结
作者是在阿里巴巴闲鱼技术部,目前负责闲鱼 app 包大小、流畅度、启动等端体验内容。本篇内容来自 ArchSummit 会议分享,围绕 flutter 流畅度,分别讲述:
- Flutter 流畅度优化挑战;
- 列表容器和 FlutterDx 组件优化;
- 性能衡量和 devtool 扩展;
- Flutter 滑动曲线优化;
- 性能优化建议。