协程与 async 降级
协程编译器把可挂起的函数改写成状态机。本文对比有栈与无栈协程的实现路径,推导状态机变换与帧布局,讲解挂起点分析、跨挂点变量提升与帧内存复用,再落到帧分配策略、与垃圾回收及栈复制的交互,以及 C++20、Rust、Go 的工程实践、取消语义与常见坑。
tag
协程编译器把可挂起的函数改写成状态机。本文对比有栈与无栈协程的实现路径,推导状态机变换与帧布局,讲解挂起点分析、跨挂点变量提升与帧内存复用,再落到帧分配策略、与垃圾回收及栈复制的交互,以及 C++20、Rust、Go 的工程实践、取消语义与常见坑。
后台任务要在 Doze、省电模式与厂商保活策略之间可靠执行,靠 Service 或定时器都撑不住。本文讲透 WorkManager 的 Worker 与 CoroutineWorker 写法、约束条件与触发时机、链式与并行任务、唯一工作与替换策略、重试退避、加急工作、前台服务长任务,以及 Doze 下的执行保证与测试调试手段。
Flow 是 Android 上连接数据库、网络与界面的数据管道,但冷热流选错、背压处理不当就会写出丢事件或卡顿的代码。本文讲透冷流与热流的语义差别、StateFlow 与 SharedFlow 的选型依据、常用操作符与背压策略、flatMapLatest 的并发语义、生命周期感知收集、异常重试,以及 Room 与 Retrofit 的集成写法。
PHP 生成器、Fiber 与协程调度实战:Iterator 接口与 yield 语义、惰性序列与内存优势、send/getReturn/throw 双向通信、大文件与数据库游标流式处理、Fiber 的挂起与恢复、状态机与事件循环协作、与 Swoole/ReactPHP 的对比、手写协作式任务调度器。
网络层是 Android 应用最脆弱的一环,超时、重试与错误封装稍有疏漏就会引发线上问题。本文用 Retrofit 2.11 与 OkHttp 4.12 搭建可维护的网络层:接口注解与挂起函数设计、转换器工厂在三种序列化方案间的取舍、拦截器与认证器、超时与连接池配置、统一错误封装与退避重试,以及证书固定、模拟服务器测试与混淆保留规则。文末给出网络层常见坑清单与排查思路。
生命周期错配是 Android 内存泄漏与崩溃的主要成因,视图模型则是官方给出的隔离方案。本文梳理两者的协作关系:页面回调链路、生命周期与观察者、安全收集流的方式、视图模型作用域的自动取消、状态保存句柄与进程死亡恢复,以及声明式界面中视图模型与可保存状态的配合。文末附常见内存泄漏清单与对应的修复手段,帮你写出生命周期安全的代码。
Kotlin 已成为 Android 官方首选语言,配合 Jetpack Compose、协程与 Hilt 构成了现代 Android 开发的标准组合。本专题覆盖从语言到上架的完整链路:Kotlin 空安全与语言基础、扩展函数与高阶函数、协程与结构化并发、Jetpack Compose 声明式 UI、Compose 状态管理与重组优化、Activity/Fragment 生命周期与 ViewModel、Room 数据持久化、Retrofit 网络层、Hilt 依赖注入、多模块架构与 Gradle 构建优化、启动加速与性能调优,以及 AAB 打包签名与 Google Play 上架流程。后续补充的 6 篇进阶内容进一步覆盖 Compose Navigation 与深链、Kotlin Flow 响应式数据流、WorkManager 后台调度、单元测试与 Espresso/Compose 测试体系、R8 混淆与 Baseline Profile,以及 Kotlin Multiplatform 跨平台共享。
系统梳理 Lua 的并发模型:单线程与事件循环的本质、阻塞与非阻塞 IO、单线程 worker 池架构,以及 lua-lanes、Luaproc 等多线程方案与 C 线程协作的方法,最后给出不同场景的并发选型建议。
系统覆盖 WebAssembly 的异常(Exceptions)与栈切换(Stack Switching)两大提案:WASM 为什么一直没有原生异常、传统返回码方案的局限、Exceptions 提案的核心(throw 标签、br_on_exn、try_table、跨宿主异常分派)、Rust panic/C++ throw 如何在 WASM 落地、栈切换提案的 suspend/resume 模型(挂起整条调用栈、恢复点、栈迁移与成本)、与事件循环/协程的关系、JS Promise Integration(JSPI)如何统一同步 WASM 与异步 JS、以及 async 运行时、生成器/迭代器、协作式多任务等典型应用,帮助读者理解 WASM 控制流的两大最新基础设施。
深入 C++20 无栈协程的编译器视角:协程帧布局、co_await/co_yield 的展开机制、promise_type 与自定义 Awaitable、C++23 生成器与异步流,以及协程在服务端 IO 与性能陷阱上的实战经验。
C++ 自 C++11 以来进入了一个快速演进的阶段,每隔三年发布一个新标准,每个版本都带来大量语法改进和库增强。对于习惯了传统 C++ 的开发者来说,C++17、C++20 和 C++23 中引入的许多特性不仅大幅提升了代码的表达力,还改变了编写和思考问题的方式。
yield 不只是用来吐出值的。本节从 send() 讲起,说明生成器为什么被称为协程的雏形;再讲 throw() 与 close() 的清理语义、GeneratorExit 为何必须重新抛出、yield from 的委托规则以及它如何取出子生成器的返回值;最后用生成器搭一条读文件、过滤、转换、聚合的惰性管道,说清它比每步生成一个列表省在哪里,并点一句异步生成器为何是另一套东西。
Python asyncio 完整指南:从零理解协程、事件循环、Task 调度,掌握 asyncio.create_task, asyncio.gather, Semaphore 限流等核心 API。通过爬虫、Web 服务、数据库访问三大实战场景,构建高并发 Python 程序。
深入理解 Lua 协程:create/resume/yield/status 的完整 API、协程四种状态与执行流转、生产者-消费者模式实现,以及协程与线程的本质区别和典型应用场景。
Lua 提供了协程(Coroutine)的支持,允许程序在单线程内实现并发执行。协程的切换由程序显式控制,而不是由操作系统调度,因此开销更小。