百倍速度的 Ansible -- Python 与 Go 的并发性能对比测试

题目有点标题党了:P

测试目标

用 Python 和 Go 的并发编程实现类似 Ansible 的 ping 命令,对比不同并发规模的执行效率。

测试环境

i7 7500 双核超线程的笔记本,win10系统。

测试结果

主机数 Ansible Python multiprocessing Python threading Python gevent Go goroutine
10 14s 5s 0.4s 0.4s 120ms
100 34s MemoryError 1.5s 1.5s 226ms
1000 [Errno 24] Too many open files - 19s 19s 偶有连接异常 11s

测试说明

  • 我记录的是多次执行的最快时间,Ansible 尤其不稳定。
  • Ansible 运行时间包含了解析 hosts 配置文件的时间,其他程序没有这个消耗。

测试总结

  • 简单翻了一下 Ansible 的源码,通过 fork 进程的方式实现并行,并行数量超过 CPU 核数以后 CPU 打满,性能低,不适合大规模任务执行。
  • Python 的多线程和协程效率差不多,资源消耗为单核打满。
  • Go 的 goroutine 处理大规模并发性能优势明显,且 CPU 资源消耗更少,1000 个并发启动时孵化 goroutine 冲到 40%,很快进入等待I/O状态,下降到 1%以下。
发布了66 篇原创文章 · 获赞 21 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_35753140/article/details/103256192