Unverified Commit e750870d authored by mgt/Enter-tainer's avatar mgt/Enter-tainer Committed by GitHub
Browse files

Update docs/tools/wsl.md

parent 6f21c061
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -42,17 +42,17 @@ Windows 10 在一周年更新时推出了 Linux 子系统(WSL),在 2020

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

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

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

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

使用虚拟机的方式带来了运行效率和兼容性两方面的提升。根据微软自己的测试,与 WSL1 相较,在 WSL2 中解压 zip 文档速度提升了 20 倍,使用 git clone、npm install、cmake 提升大约 2~5 倍。由于使用了真正的 Linux 内核,意味着 WSL2 全面兼容 Linux 系统调用,理论上能在 GNU/Linux 上运行的程序也都能在 WSL2 中不经修改直接运行。
使用虚拟机的方式带来了运行效率和兼容性两方面的提升。根据微软自己的测试,与 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 文件系统上的项目文件,那么建议你使用 WSL 1,因为跨 OS 文件系统具有更高的性能。
微软给出的建议是,如果经常使用 WSL 来访问 Windows 文件系统上的项目文件,或者需要对相同的文件使用 Windows 和 Linux 工具进行交叉编译,那么建议这些用户使用 WSL 1,因为目前 WSL 1 能跨 OS 文件系统实现更快的性能。

## 启用 WSL