Android 开发入门实战:从 0 到 1 构建一个可运行、可扩展的 Android 应用
举个例子print("开始烧水")print("水开了,开始煮面")print("切菜中...")print("菜切好了")烧水(cook)需要 3 秒钟切菜(chop)需要 2 秒钟在现实生活中,你肯定不会傻站着看水烧开吧?你会一边烧水,一边切菜。该用异步的时候当你的程序大部分时间都在等待 I/O——比如网络请求、数据库查询、文件读写、API 调用等。异步能让 CPU 在等待期间去处理别的任务,
一、为什么要学异步编程
“煮面的时候,等水开的那几分钟你会干嘛?聪明人不会干等,他们可能会去切葱花。程序也是一样——异步编程让它在‘等水’时去干别的事。”
1.我们先说一下同步编程的痛点:
阻塞、等待、性能浪费
在传统的同步编程模型中。代码是按顺序一步步执行的。
比如我们写下三行逻辑:
get_data_from_api()
process_data()
save_to_database()

看似合理,但背后的问题是:
当第一行在等待网络返回数据时,整个程序就卡在那里不动。
CPU 明明空着,却只能干等。
这种“阻塞式执行”就像排队买奶茶:前面那位顾客不点完单,你连靠近柜台的资格都没有。
在网络请求、磁盘读写、数据库查询等I/O 密集型场景里,这种等待往往耗时数秒甚至数十秒。
最终结果就是——CPU在发呆,内存在浪费,性能在下滑
这就是同步编程最大的痛点:
一个人在做事,其他人全都在等
2、那异步编程的目标是什么呢
异步编程:让CPU高效利用时间
异步编程登场的使命只有一个:
“让 CPU 不再等,让时间被榨干到最后一秒。”
当一个任务在等待 I/O 响应时,程序可以立刻切换去执行别的任务。
不浪费等待时间,也不让线程睡死。
这就像你点完咖啡后,不用站在柜台前盯着,而是回座位打开电脑,继续干活。
当咖啡好了,系统(事件循环)会通知你:“喂,任务完成了。”
技术上来说,异步编程通过事件循环(Event Loop)、协程(Coroutine)和回调机制(Callback)让程序能“同时处理多个任务”,而实际上仍然只有一个线程在执行。
结果?
- CPU 的利用率显著提升
- 响应时间更短
- 系统可同时服务更多用户
异步编程的终极目标,就是把“等待时间”变成“生产时间”。
二、核心原理:到底什么是异步?
举个例子
import asyncio
async def cook():
print("开始烧水")
await asyncio.sleep(3)
print("水开了,开始煮面")
async def chop():
print("切菜中...")
await asyncio.sleep(2)
print("菜切好了")
async def main():
await asyncio.gather(cook(), chop())
asyncio.run(main())

这段代码模拟了我们在厨房做饭的情景:
- 烧水(cook) 需要 3 秒钟
- 切菜(chop) 需要 2 秒钟
在现实生活中,你肯定不会傻站着看水烧开吧?
你会一边烧水,一边切菜。
核心语法拆解:
| 关键词 | 作用 | 通俗解释 |
|---|---|---|
| async | 声明异步函数 | 告诉Python“这段代码可能会遇到等待,要非阻塞执行” |
| await | 暂停并等待异步任务 | 程序可以“暂时放下”这个任务,去做别的事情 |
| asyncio.sleep() | 模拟异步等待 | 相当于“烧水的时间”,CPU不会浪费资源等待 |
| asyncio.gather() | 同时运行多个任务 | 让烧水和切菜“并行进行” |
| asyncio.run() | 启动事件循环 | 启动整个异步世界的引擎 |
我们对比一下同步版的做法
def cook():
time.sleep(3)
def chop():
time.sleep(2)
cook()
chop()

总耗时:5 秒
烧水 → 等3秒 → 再切菜 → 再等2秒
异步版(上面那段):
实际总耗时:3 秒左右
因为烧水和切菜是同时开始的,CPU 在烧水等待的3秒内,不是闲着,而是去切菜了。
时间被充分利用——这就是异步的威力。
底层发生了什么?
Python 的 asyncio 模块在背后启动了一个事件循环(Event Loop),它会:
- 把所有异步任务放进一个“待办清单”;
- 一旦某个任务遇到
await(比如sleep),就先挂起; - 去执行别的任务,等那个“等待事件”完成后再回来继续。
整个过程是单线程完成的,但效果上就像“多线程一样高效”。
那提到多线程,我们来讲一下异步编程vs多线程vs多进程
我们这里简单提一下
异步编程的核心是让CPU在等待I/O时不闲着,通过事件循环和协程实现任务切换,最大化时间利用率。相比之下,多线程是开多个线程同时跑任务,多进程则是多个独立程序并行执行。异步更轻量、开销小,特别适合网络请求、数据库操作等I/O密集型场景,是现代后端高性能的关键。
三、总结:什么时候时候该用异步
该用异步的时候:
当你的程序大部分时间都在等待 I/O——比如网络请求、数据库查询、文件读写、API 调用等。异步能让 CPU 在等待期间去处理别的任务,极大提升吞吐量和响应速度。典型场景:Web服务器、爬虫、聊天机器人、AI Agent 等。
不该用异步的时候:
当任务是CPU 密集型的,比如图像处理、模型训练、复杂计算。这时 CPU 始终在高强度运算,根本没有等待空间,异步反而拖慢效率。此时更应该用多进程或原生多线程。
如果你觉得有收获,欢迎点赞、收藏或留言交流,我们一起写出更优雅、更高效的代码
作者:浦颖昊
原文链接:Android 开发入门实战:从 0 到 1 构建一个可运行、可扩展的 Android 应用
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)