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%的原因是什么?
为什么呢
这个现象的核心原因是 Windows Subsystem for Linux (WSL) 上的 Python 运行在 Linux 内核上,而 python.exe 运行在 Windows 内核上。两者底层环境不同,导致性能差异。
主要原因有几点:
-
文件系统开销:当
python.exe访问 Windows 文件系统(如 NTFS)上的代码和依赖库时,其 I/O 性能通常低于 WSL 中 Linux 环境访问其原生文件系统(如 ext4)。特别是涉及大量小文件读写时,差异更明显。 -
系统调用转换:WSL 1 通过转换层将 Linux 系统调用映射到 Windows 内核,有一定开销。但 WSL 2 使用真正的 Linux 内核,系统调用是原生的,避免了转换损耗,性能通常更好。如果你的测试在 WSL 2 上,这是主要提速原因。
-
进程创建与管理:Linux 的进程/线程创建开销通常比 Windows 小。Python 启动、导入模块(会生成子进程的操作)或使用
multiprocessing时,在 WSL/Linux 上可能更快。 -
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
确实有差距,但没那帖子那么夸张。

