【发布时间】:2010-02-13 02:07:34
【问题描述】:
当我使用 MSYS 编译某些东西时,./configure 步骤可能需要比make 更长的时间。但是,Linux 中的同一进程具有快速配置和慢速生成。这只是 MSYS 中的一些设置,它使我的系统陷入困境吗?有人有解决办法吗?
【问题讨论】:
标签: msys
当我使用 MSYS 编译某些东西时,./configure 步骤可能需要比make 更长的时间。但是,Linux 中的同一进程具有快速配置和慢速生成。这只是 MSYS 中的一些设置,它使我的系统陷入困境吗?有人有解决办法吗?
【问题讨论】:
标签: msys
典型的configure 脚本会很多启动小型子进程。在类 Unix 操作系统上,这是通过 fork() 和 exec() 函数调用完成的,它们具有需要保留的非常特殊的语义(例如,分叉后的写时复制共享内存)。在 Windows 上,子进程是使用 CreateProcess() 创建的,它具有非常不同的语义(例如,将内存空间与父进程完全分开)。为了正确执行类 Unix 的脚本和程序,MSYS 需要做大量的模拟工作,以使在 Windows 上创建新进程就像在 Unix 上的fork()/exec() 一样工作。这最终会比本机提供这些函数调用的操作系统慢。
【讨论】:
CreateProcess其实还不错。我认为 cygwin 试图在 windows 上模拟 fork,这使得它非常慢。如果 bash 没有使用 fork(我猜它使用 fork,但我没有检查)来启动进程,那么 configure 将运行得一样快。当我试图解决这个“问题”时,在我的 i7 机器上,cygwin 似乎每秒只能分叉几次。一种测试fork速度的方法:while(true);约会;完成 | uniq -c
您可能还想关闭正在运行的所有病毒扫描程序。他们会在每次加载可执行文件时重新扫描它,这绝对会影响脚本性能。
即使您没有运行防病毒软件,也不要忘记 Windows Defender。 (您可能还想禁用用户帐户控制,但我不知道这对程序加载时间有什么影响。)
【讨论】:
涉及大量磁盘访问,恕我直言,这大大减慢了速度。 例如,configure 创建临时源代码以作为其执行的测试的一部分进行编译。这将创建一个必须再次删除的目标文件。 我为加速配置所做的就是提取我想要在 RAM 驱动器上构建的源代码并在那里配置和编译它。 我推荐使用免费的 ImDisk (http://www.ltr-data.se/opencode.html/#ImDisk)。
【讨论】: