登录
No.40核心2 条来源

多线程Multithreading

课堂投屏

一句话

多线程让一个程序里有多条执行路线分头处理任务,但它们共享数据时容易互相干扰。

大白话

多线程像一个厨房里请了几位厨师同时开工:一个切菜,一个炒菜,一个煲汤,出菜可能比一个人快。

比喻的边界

厨师们共用一口锅和一个调料架,没约定好就会抢锅、放错料;而且有的厨房规定同一时刻只能一个人掌勺,比如 Python 的全局解释器锁,多请人也不会更快。

拿去就能用

开始做

我的处理太慢了。先帮我判断它主要慢在等网络、读写文件,还是在大量计算,再推荐多线程、多进程或异步,说明理由后再改。

还差:程序或脚本、任务规模,发给 AI 前记得换掉

出错了

我用多线程统计订单总数,每次运行结果都不一样,而且都比实际少。我怀疑多个线程在同时改同一个变量,先帮我验证,找到问题后再用最小改动修复。

想做深

我的网页处理一个大表格时会卡住几秒,按钮点不动。帮我判断能不能把这段计算放进 Web Worker,说明它和页面之间怎么传数据,改完告诉我怎么确认页面不再卡。

别这样说 → 这样说

别这样说

程序太慢了,帮我改成多线程。

这样说

我的 Python 脚本要下载 200 张图片,一张张下载要 10 分钟。帮我先判断慢在等网络还是在计算,再选合适的并发方式,限制同时下载的数量,改完对比前后耗时给我看。

差别:给出了任务规模和耗时,先诊断瓶颈再选方案,并用前后对比验收。

容易误解:

误解线程越多,程序就越快。

其实是慢在等网络时,多线程常有帮助;慢在计算时,Python 受全局解释器锁限制,多线程几乎不提速。线程多了还会带来抢资源和数据错乱。

展开专业理解

线程共享同一进程的内存,通信方便,但同时修改同一份数据会出现竞态,需要加锁,锁用不好又会死锁。默认的 CPython 同一时刻只有一个线程执行 Python 代码(新版本有可选的无锁构建,但新手环境通常仍是默认版本),多线程适合等待网络、文件这类任务,大量计算更适合多进程。浏览器里可以用 Web Worker 把计算放到后台线程,但它不能直接操作页面元素。

来源

  1. Python 文档:threading 核对于 2026-09-26
  2. MDN:使用 Web Worker 核对于 2026-09-26