1. Coroutine协程
kotlin协程是一种并发设计模式,可以用来在Android上简化异步执行的代码。有助于管理长时间运行的任务。可实现类似RxJava效果。
特点:
- 轻量:可以在单线程上运行多个协程。
- 内存泄露少;
- 内置取消操作;
- 支持jetpack;
缺点:
-
本质是单线程的,无法利用多核资源;
-
无法避免阻塞:虽然协程可以异步处理I/O操作,但对于一些需要长时间运行的任务(如计算、网络请求等),仍然可能导致整个程序阻塞。
-
难以调试:由于协程的执行流程比较复杂,调试起来相对困难。
| 特性 | 协程 (Coroutine) | 线程 (Thread) |
|---|---|---|
| 层级与控制 | 属于用户态,由开发者通过代码调度和控制 | 属于内核态,由操作系统(OS)内核调度 |
| 资源开销 | 极其轻量,占用内存仅几 KB,可同时创建数万个 | 较为昂贵,每个线程占用约 1MB 栈内存,创建过多易导致内存溢出 |
| 切换成本 | 极低,仅需在单个线程内切换执行流,无需系统内核介入 | 较高,需要 CPU 从用户态切换到内核态保存/恢复上下文 |
| 挂起与阻塞 | 遇到耗时操作时,协程会被 挂起,其所在的线程可以去执行其他协程(非阻塞) | 遇到阻塞操作时,整个线程被 挂起,直到条件满足才可继续,极大消耗系统资源 |
| 编码体验 | 采用同步的方式写异步代码(如 suspend 关键字),逻辑连贯,天然避免“回调地狱” | 回调嵌套深,代码难以维护,常被称为“回调地狱” |
2 flow