Unverified Commit db4a84d5 authored by Shuhao Zhang's avatar Shuhao Zhang Committed by GitHub
Browse files

Merge pull request #2581 from zcmimi/patch-1

feat(wsl): add differences between wsl1 and wsl2
parents f79ec540 031847e2
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -42,6 +42,18 @@ Windows 10 在一周年更新时推出了 Linux 子系统(WSL),在 2020

如果系统已经安装了 2020 年 5 月更新(内部版本 19041)或更高版本,则可以考虑开启 WSL 2。建议权衡自己的需求选择适合的版本。

WSL 1 的机制,总体上是在运行时将 Linux 系统调用翻译为 NT API 调用,从而在 NT 内核基础之上模拟实现 Linux 内核。

无论是在 ABI 还是 API 层模拟,Linux/UNIX 与 Windows NT 毕竟是两类内核,设计理念、设计标准等多方面差异甚大,无法实现完全对等模仿,WSL 1 无法兼容所有 Linux 系统调用,程序无法在 WSL 中运行的情况时有发生。

也许是因为 WSL 1 靠翻译系统调用来模拟 Linux 内核的方法存在诸多问题,这种黑科技思路在 WSL 2 中被微软完全抛弃。WSL 2 基于长期支持版内核 Linux 4.19,并在此基础上加以修改而成。新的内核经过了微软悉心改造,以便与 Windows 相配合,获得更好的用户体验。WSL 2 同时采用了虚拟机的技术,将 Linux 内核塞到一个轻量级的虚拟机(英文:Virtual Machine,简称:VM)中运行,使用体验基本与 WSL 保持一致。

使用虚拟机的方式带来了运行效率和兼容性两方面的提升。根据微软自己的测试,与 WSL 1 相较,在 WSL 2 中解压 zip 文档的速度提升了 20 倍,使用 git clone、npm install、cmake 的速度提升了大约 2~5 倍。由于使用了真正的 Linux 内核,WSL 2 全面兼容了 Linux 系统调用,理论上能在 GNU/Linux 上运行的程序也都能在 WSL 2 中不经修改直接运行。

性能方面,WSL 和 WSL 2 各有优势。 **如果不和本机系统交互,WSL 2 的性能非常不错,但如果访问 Windows 文件系统下的文件,IO 性能会下降很多。** 

微软给出的建议是,如果经常使用 WSL 来访问 Windows 文件系统上的项目文件,或者需要对相同的文件使用 Windows 和 Linux 工具进行交叉编译,那么建议这些用户使用 WSL 1,因为目前 WSL 1 能跨 OS 文件系统实现更高的性能。

## 启用 WSL

???+ warning