同步 vs 异步 LLM 调用:并排对比
并发 LLM 操作的性能对比——比较 asyncio 和 httpx 的吞吐量
同步 vs 异步 LLM 调用:并排对比
并发 LLM 操作的性能对比——比较 asyncio 和 httpx 的吞吐量
同步 vs 异步 LLM 调用对比(2026):单次调用用同步、并发多请求用 async——100 个请求 400s 变 40s。含 Semaphore 限流、事件循环阻塞等常见坑、决策表,以及与 Batch API/流式的关系。
同步 vs 异步 LLM 调用:并排对比
规则一句话:一次只调一个 → 同步没问题;同时调多个 → 异步完胜,差距巨大。 LLM 请求是数秒纯 I/O 等待。同步代码白白消耗这些时间;异步代码利用它们运行其他请求。100 次调用每次约 4 秒,顺序同步约 400 秒,并发数为 10 的异步只需约 40 秒。API 账单相同,但挂钟时间缩短 10 倍。
这里不讨论:让单次调用更快。异步对单次调用的延迟毫无帮助——模型耗时该多久还是多久。
同一任务,两种方式
python
同步——适用于脚本、CLI、一次一个的流程
from openai import OpenAIclient = OpenAI()
def summarize(text: str) -> str:
resp = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': f'Summarize in one line: {text}'}]
)
return resp.choices[0].message.content
results = [summarize(doc) for doc in documents] # N * 延迟,顺序执行
python
异步——相同工作,并发执行
import asyncio
from openai import AsyncOpenAIclient = AsyncOpenAI()
sem = asyncio.Semaphore(10) # 并发上限——见下文
async def summarize(text: str) -> str:
async with sem:
resp = await client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': f'Summarize in one line: {text}'}]
)
return resp.choices[0].message.content
async def main():
return await asyncio.gather(*(summarize(d) for d in documents))
results = asyncio.run(main()) # ~N/10 * 延迟
每个主流 SDK 都提供两个客户端(OpenAI/AsyncOpenAI、Anthropic/AsyncAnthropic);在 Node.js 中一切默认异步,所以这个决策主要存在于 Python 中。
信号量不是可选项
asyncio.gather 对 5000 个协程会同时发起 5000 个请求——你会立刻触发 429 速率限制,甚至可能触发滥用检测。信号量限制在途请求数。根据你的速率限制来设定大小:大致为 (每分钟请求限制 / 60) × 平均请求秒数,然后在此基础上保守一些。对于仍然漏过的 429 错误,添加带退避的重试(SDK 会自动重试;调整 max_retries 参数)。
决策表
async def 路由 + 异步客户端混合同步和异步(常见错误)
asyncio.to_thread() 中。asyncio.run()(Jupyter、FastAPI)——引发 RuntimeError。在笔记本中直接 await main()。ThreadPoolExecutor 也能获得并发性,在遗留代码库中是一个合理的过渡方案——但线程消耗更多内存,且池大小有限制。对于 LLM 规模的 I/O 并发,asyncio 是更干净的选择。流式传输是正交的
同步 vs 异步是关于*有多少请求重叠*;流式传输是关于*逐步接收一个响应*。它们可以组合——异步处理器可以在其他请求进行的同时将令牌流式传输到浏览器。关于传输机制,请参见 LLM 流式传输 vs 轮询 和 SSE 实现指南。
常见问题
异步能降低成本吗? 不能——相同的令牌,相同的账单。它减少挂钟时间,让一台服务器处理更多并发用户(这可以降低*基础设施*成本)。
并发数可以设多高? 取决于你的提供商速率限制层级。超过约 50-100 个并发请求时,还要注意 HTTP 客户端的连接池限制。
asyncio 与 multiprocessing 对比? LLM 调用是 I/O 密集型,不是 CPU 密集型——多进程没有好处,反而带来序列化开销。将进程保留给真正的 CPU 密集型预处理/后处理。
*最后更新:2026 年 6 月。*
相关工具
相关教程
OpenAI API 模式中的成本与吞吐量权衡——跨 openai 和 python 的批处理对比
AI 编程环境对比——深入比较 Anthropic 与 OpenAI 的开发者工具
AI 输出的模式验证对比——比较 Zod 和 Pydantic 的类型安全性
Transformers.js 与 ONNX Runtime 浏览器端 AI 推理详细对比
两大领先LLM框架深度对比
LangChain与LlamaIndex构建检索增强生成应用的诚实技术对比,含基准测试、用例及迁移指南