skr Asked: 2019-05-16 06:15:37 +0800 CST2019-05-16 06:15:37 +0800 CST 2019-05-16 06:15:37 +0800 CST 在 make 命令中使用 $($(nproc) + 1) 的逻辑是什么? 772 我试图根据一些在线指南在 Ubuntu 中安装 OpenCV。指南之一就是这个。它具有以下行: make -j $(($(nproc) + 1)) nproc返回系统上可用的处理器/线程数。那么,比现有的高一级有什么好处呢? cpu make 1 个回答 Voted Best Answer Stephen Kitt 2019-05-16T06:33:22+08:002019-05-16T06:33:22+08:00 大多数构建都受 I/O 限制,而不是 CPU 限制,因此虽然nproc是一个不错的起点(另请参阅如何确定传递给 make -j 选项的最大数量?),但大多数构建可以使用更多。如果您使用小型虚拟机进行构建,则尤其如此,您经常会在构建农场中找到它;在那里你最终会得到-j 1or -j 2,并且使用-j 2or-j 3通常会导致更短的构建时间而没有与公式相关的风险$(nproc) * 2(即使在 8 线程系统上也可能导致问题,更不用说你发现的更大的线程数了服务器)。
大多数构建都受 I/O 限制,而不是 CPU 限制,因此虽然
nproc
是一个不错的起点(另请参阅如何确定传递给 make -j 选项的最大数量?),但大多数构建可以使用更多。如果您使用小型虚拟机进行构建,则尤其如此,您经常会在构建农场中找到它;在那里你最终会得到-j 1
or-j 2
,并且使用-j 2
or-j 3
通常会导致更短的构建时间而没有与公式相关的风险$(nproc) * 2
(即使在 8 线程系统上也可能导致问题,更不用说你发现的更大的线程数了服务器)。