![make 命令中使用 $($(nproc) + 1) 的逻辑是什么?](https://linux22.com/image/153573/make%20%E5%91%BD%E4%BB%A4%E4%B8%AD%E4%BD%BF%E7%94%A8%20%24(%24(nproc)%20%2B%201)%20%E7%9A%84%E9%80%BB%E8%BE%91%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我试图根据一些在线指南在 Ubuntu 中安装 OpenCV。其中指南之一是这个。它有以下行:
make -j $(($(nproc) + 1))
返回nproc
系统上可用的处理器/线程的数量。那么,比现有的更高的有什么优势呢?
答案1
大多数构建都受 I/O 限制,而不是 CPU 限制,因此 whilenproc
是一个不错的起点(另请参阅如何确定传递给 make -j 选项的最大数量?),大多数构建可以使用更多。如果您使用小型虚拟机进行构建(您经常会在构建场中找到这种虚拟机),则尤其如此;在那里你最终会得到-j 1
or -j 2
,并且使用-j 2
or-j 3
通常会导致更短的构建时间,而没有与诸如$(nproc) * 2
(即使在 8 线程系统上也可能导致问题的公式相关的风险,更不用说你发现的更大的线程数了服务器)。