Python中Windows Subsystem for Linux上的Python比Python.exe快50%的原因是什么?

https://www.reddit.com/r/Python/comments/6qndr6/
Python中Windows Subsystem for Linux上的Python比Python.exe快50%的原因是什么?

9 回复

为什么呢


这个现象的核心原因是 Windows Subsystem for Linux (WSL) 上的 Python 运行在 Linux 内核上,而 python.exe 运行在 Windows 内核上。两者底层环境不同,导致性能差异。

主要原因有几点:

  1. 文件系统开销:当 python.exe 访问 Windows 文件系统(如 NTFS)上的代码和依赖库时,其 I/O 性能通常低于 WSL 中 Linux 环境访问其原生文件系统(如 ext4)。特别是涉及大量小文件读写时,差异更明显。

  2. 系统调用转换:WSL 1 通过转换层将 Linux 系统调用映射到 Windows 内核,有一定开销。但 WSL 2 使用真正的 Linux 内核,系统调用是原生的,避免了转换损耗,性能通常更好。如果你的测试在 WSL 2 上,这是主要提速原因。

  3. 进程创建与管理:Linux 的进程/线程创建开销通常比 Windows 小。Python 启动、导入模块(会生成子进程的操作)或使用 multiprocessing 时,在 WSL/Linux 上可能更快。

  4. Python 本身实现:两个环境下的 Python 解释器都是 CPython,但可能由不同编译器(GCC vs MSVC)编译,优化选项和链接的库不同,可能导致细微差异。

简单说,WSL 2 的 Linux 内核环境在 I/O 和进程操作上通常比原生 Windows 更高效。

总结建议:对性能敏感的项目,可以考虑在 WSL 2 中开发运行。

迷之 50%

一使用 Subsystem,Android Studio 的模拟器就出错?😳

应该是 c 库的差异吧

只有一个样本不叫测试。也许是一部分 API 快,一部分 API 慢呢。

Windows Subsystem for Linux 跟 linux 环境差别很大建议还是少折腾,50%应该是线程同步的问题

昨天也看到这个…

有人说是 MSVC 和 Gcc 的问题 有人说是源码编译更好, 很迷

> python3.exe -c "import sys; print(sys.version)"
3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)]

> python3.exe -m test.pystone 5000000
Pystone(1.2) time for 5000000 passes = 38.1625
This machine benchmarks at 131019 pystones/second


$ python3 -c "import sys; print(sys.version)"
3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609]

$ python3 -m test.pystone 5000000
Pystone(1.2) time for 5000000 passes = 36.8147
This machine benchmarks at 135815 pystones/second

确实有差距,但没那帖子那么夸张。

回到顶部