【问题标题】:Why is configure so slow in MSYS?为什么在 MSYS 中配置这么慢?
【发布时间】:2010-02-13 02:07:34
【问题描述】:

当我使用 MSYS 编译某些东西时,./configure 步骤可能需要比make 更长的时间。但是,Linux 中的同一进程具有快速配置和慢速生成。这只是 MSYS 中的一些设置,它使我的系统陷入困境吗?有人有解决办法吗?

【问题讨论】:

    标签: msys


    【解决方案1】:

    典型的configure 脚本会很多启动小型子进程。在类 Unix 操作系统上,这是通过 fork() 和 exec() 函数调用完成的,它们具有需要保留的非常特殊的语义(例如,分叉后的写时复制共享内存)。在 Windows 上,子进程是使用 CreateProcess() 创建的,它具有非常不同的语义(例如,将内存空间与父进程完全分开)。为了正确执行类 Unix 的脚本和程序,MSYS 需要做大量的模拟工作,以使在 Windows 上创建新进程就像在 Unix 上的fork()/exec() 一样工作。这最终会比本机提供这些函数调用的操作系统慢。

    【讨论】:

    • 在windows上CreateProcess其实还不错。我认为 cygwin 试图在 windows 上模拟 fork,这使得它非常慢。如果 bash 没有使用 fork(我猜它使用 fork,但我没有检查)来启动进程,那么 configure 将运行得一样快。当我试图解决这个“问题”时,在我的 i7 机器上,cygwin 似乎每秒只能分叉几次。一种测试fork速度的方法:while(true);约会;完成 | uniq -c
    • +1 Pavel .. uclinux 有同样的问题,它可以在没有 MMU 的情况下运行,并且任何带有 fork 的东西都使用非常慢的完整副本
    【解决方案2】:

    您可能还想关闭正在运行的所有病毒扫描程序。他们会在每次加载可执行文件时重新扫描它,这绝对会影响脚本性能。

    即使您没有运行防病毒软件,也不要忘记 Windows Defender。 (您可能还想禁用用户帐户控制,但我不知道这对程序加载时间有什么影响。)

    【讨论】:

      【解决方案3】:

      涉及大量磁盘访问,恕我直言,这大大减慢了速度。 例如,configure 创建临时源代码以作为其执行的测试的一部分进行编译。这将创建一个必须再次删除的目标文件。 我为加速配置所做的就是提取我想要在 RAM 驱动器上构建的源代码并在那里配置和编译它。 我推荐使用免费的 ImDisk (http://www.ltr-data.se/opencode.html/#ImDisk)。

      【讨论】:

        猜你喜欢
        • 2016-10-08
        • 1970-01-01
        • 2021-09-03
        • 2014-09-15
        • 1970-01-01
        • 2017-05-21
        • 2017-03-28
        • 2013-02-26
        • 1970-01-01
        相关资源
        最近更新 更多