我之前总是使用虚拟机、Windows 10 Ubuntu子系统来兼顾两种平台。最近,有意识地对比了跨平台工具在Linux、Windows中的运行速度,发现:大多数情况下,Linux的工程编译速度几乎秒杀Windows。
主要工作平台
- gcc/arm-none-eabi-gcc的工作环境中使用GNU Makefile,在Linux所需编译时间只有Windows的三分之一。
- Arduino,在Linux中编译工程按照秒计算,而Windows都是按照分钟计算。
- IDE,Windows/Linux都有ATOM。
- Office,使用WPS和Libre Draw替代Office/Visio。
- 工程管理,使用planner替代project。
- 通讯,使用Web版本Wechat。
- 虚拟机,VirtualBox。
- 容器,Docker,Linux原生。
- Cloud,Node.js/Python等在OS上的性能尚未比较。
- Android Studio,在OS上的性能未比较。
结论
为何Linux下编译速度会明显快于Windows,我在知乎和Stackoverflow中都问了一下,自己也观察了一下。
同样Arduino IDE,Arduino在Linux的中间文件路径是:
/tmp/arduino_build_xxxxx/
在Windows的中间文件路径是:
/Documents and Settings/allankliu/Local.......
也就是说Linux中,Arduino是把所有中间文件写到 /tmp 中去了,该路径是挂载在内存中的。确切地说,tmpfs是一种VM,由内存和虚拟内存(硬盘)组成,系统会自动切换调整。一般来说会占据物理内存的一半。
而Windows中的Arduino都是需要写盘的,且路径较深。所以Arduino IDE在Windows中编译偏慢可以理解了。拿工具测试了一下,至少差12倍的速度。
速度还在其次,我在想,如果一台采用SSD硬盘的电脑,长期执行编译任务,这种频繁写入、擦除,是否影响存储器寿命?而Linux下,由于tmpfs的存在,大大减少了反复写入的过程。
如果使用Makefile/CMake等工具,或者Arduino这种IDE,在Windows下编译简单工程无所谓。但是随着模块的增加,那么编译速度决定了整个工程编译所需的时间和交期。
所以,以Windows为操作台,以Linux为(分布式)编译平台,可以成为以后的工作台形式。
更新
在老旧的Dell D520 (T5500/3G DRAM)上运行的Kylin Ubuntu 18.04LTS。下载安装了NXP的MCUXpresso,这是一个基于Eclipse的IDE,一个惊喜之处是支持SDK压缩包的拖拽操作,比原来的检索下载要快许多。其次是MCUXpresso编译LPC5411X的工程也是按照秒来计算的。非常快!比Windows下快多了。
网友评论