拿下技术面上传简历

一个基于 asyncio 的 HTTP 服务,单进程单事件循环,正常 P99 是 20ms。接入一个新的下游 SDK 后,该 SDK 只有同步阻塞接口(单次调用约 50ms,内部是阻塞 socket 读)。上线后 P99 涨到 500ms,QPS 也上不去。你会怎么定位和改造?请说清你选哪种方案、线程/进程开多少、以及并发量上来之后会先崩在哪里。

工程与系统设计代码与工程3-5 年知识点 1 个

面试官在考什么

判断他是真的理解事件循环被阻塞的机理、以及线程池容量与背压的关系,还是只会说一句「用 run_in_executor 丢到线程池」。

并发与异步

回答框架 · 前两步

  1. 定位:确认是阻塞调用卡住了事件循环——特征是所有请求的延迟被一起抬高,而不是只有走这条下游路径的请求慢;可以通过在事件循环里打心跳协程、看 loop lag,或在调用前后打点来确认。
  2. 方案:用 loop.run_in_executor / asyncio.to_thread 把阻塞调用丢进线程池;必须显式指定线程池大小——默认 executor 的 max_workers = min(32, os.cpu_count() + 4),不指定时并发一高任务就在队列里排队。

还有 3 条答案要点、 3 层追问、 4 个常见坑, 以及针对你简历的追问路径,在定制报告里。

上传简历,生成我的题库先看示例报告

同一能力域的其他题