【问题标题】:Make uses multiple cores even without -j argument?即使没有 -j 参数,Make 也使用多个内核?
【发布时间】:2017-05-31 04:04:57
【问题描述】:

我在我的 MacBook Pro(四核)上注意到,当我运行 make 时,它​​所花费的时间与 make -j 相同,而且果然,Activity Monitor 显示所有四个内核的使用率都很高。为什么是这样? Apple有一些默认设置吗?我的意思是,将 -j 作为默认值是有意义的,但从我在网上看到的情况来看,没有参数的 make 应该只使用一个线程。

这不一定是问题,但我还是想了解原因。

【问题讨论】:

  • 我们可能需要一个实际的工作示例来展示这种行为。 makefile inside 可能有一些诡计(它可以使用 -j 标志调用另一个 makefile),甚至与编译器有关。
  • 您通常有一个默认的 make 文件配置,它指定默认的 -j $NUM_CORES 值。我不知道它在 Mac 上的位置。通常,您不会设置大于 1 的默认值,因为大多数代码(甚至是最近的代码)不会并行构建,除非代码是专门编写的以利用并行编译的优势。您可能会使用一个内核进行实际编译,但您的其他内核中也会有大量工作要做。

标签: bash macos gnu-make


【解决方案1】:

-j|--jobs 标志指定/限制可以同时运行的命令数,而不是分配给单个命令的线程数。将此选项视为并发而不是并行。

例如,我可以指定 --jobs=2 并在后台运行一个 ES6 转译器和一个 SASS 预处理器,在同一个终端窗口中,监视我可能进行的任何文件更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    相关资源
    最近更新 更多