我在Python中实现了Dijkstra的算法,并在Ubuntu和Windows 8下运行脚本。均为 x64 架构。
我使用 python -m cProfile name.py
分析了脚本
我很惊讶地看到,与Windows相比,该程序在Ubuntu中花费了一半的时间。
1000 x 1000 矩阵的 Ubuntu 运行时间:0.4 sec
1000 x 1000 矩阵的 Windows 运行时间 = 1.2 sec
这是在同一台双引导计算机上。
这是怎么回事?
首先 - 显而易见的是,虽然 python 的版本可能相同,但它们是用不同的编译器编译的,这自然意味着优化级别完全不同。例如,您可以使用gcc为两个系统重新编译python,然后再次运行整个系统。但是,我建议您仅在确定自己在做什么时才这样做。更具体地说,对于linux,因为许多运行的进程严重依赖于python。看看这个讨论。
其次,Windows自然比Linux占用更多的资源,并且开箱即用的Windows启动了更多的进程,每个进程通常都是一个无限循环,占用资源。
基于操作系统比较性能是一个错误的概念。这基本上就像将苹果与橙子进行比较。每个系统都有不同的方法来管理其内存和正在运行的进程。文件系统是另一个非常重要的部分 - 由于 python 在大多数情况下是一种解释型语言,因此每次导入都在执行磁盘操作。
实际上,有一些原因导致我的机器中的 Python 性能缓慢。但是,我没有统计数据,所以我这边也没有证据。您可能还必须检查它们(也要加一点盐;-((。
- 防病毒 - 如果有防病毒软件,请将Python位置以及程序的位置添加到白名单中,然后尝试运行它们; 这实际上为我带来了近33%的性能
- 进程优先级 - 在运行时为进程提供高优先级(就我而言,这是一个长时间运行的进程,所以我只是通过任务管理器进行操作(
- 正确的驱动程序 - 相信我。尽管这听起来很愚蠢,但升级设备驱动程序确实可以提高性能。举个例子,当我从外部硬盘运行 python 进程时,与内部硬盘相比,它的运行效果要好一些。一旦我更新了硬盘驱动程序,它实际上开始比我的外部硬盘运行得更好(需要注意的是,它仍然比Linux版本慢(
但是,这些可能仍然无法帮助您达到像 Linux 那样的性能。主要原因是两个python可能由不同的c编译器编译。libc 也可能正在运行。