脚本并发的记录
目录
脚本并发优化笔记。
目标
批量读取几十万条客户端 IP,查询 IP 库获取位置和运营商信息,更新回数据库。
问题
单进程单线程:每秒仅完成 1 条数据更新,速度太慢。
方法一:脚本并发
多进程 vs 多线程?逻辑不是计算密集型,瓶颈在 IP 库查询和数据库更新,选择多线程。
尝试 6 线程并发,性能提升,但 show processlist 发现:
- 6 个 UPDATE 中仅 1 个实际在 updating
- 其他 5 个都在 locked 等待锁
结论:数据库并发成为瓶颈。
方法二:数据库引擎升级
修改表引擎为 InnoDB(原为 MyISAM),支持行级锁。
结果:6 线程并发,每秒更新 5.8~7.5 条(相比单线程 0.57 条,提升 10 倍)。
对比结果
| 方案 | 性能 |
|---|---|
| 单进程单线程 | 0.57 条/秒 |
| 多进程(4进程) | 1.08~2.38 条/秒(不稳定) |
| 多线程(6线程)+ InnoDB | 5.8~7.5 条/秒 |