不管 --jobs 是什么,GNU Make 只使用 4 个线程
GNU Make only uses 4 threads no matter what --jobs is
无论我传递什么 --jobs
参数,我总是得到 4 个线程。
在 make --jobs=1 target
期间,我可以看到以 make[1]:
、make[2]:
、make[3]:
和 make[4]:
开头的标准输出行,而我只希望有一个线程。
如果我使用 make --jobs=100 target
,结果相同,我得到 4 个线程而不是 100 个。
我不确定这是否相关,但我 运行 在 docker 容器中创建 docker 我的 7 个本地主机核心可用。
>docker info
Operating System: Docker Desktop
OSType: linux
Architecture: x86_64
CPUs: 7
在 Alpine Linux docker 容器内
>make --version
GNU Make 4.2.1
Built for x86_64-alpine-linux-musl
>grep -c ^processor /proc/cpuinfo
7
确认容器获得 7 个内核。
有什么我可以 运行 帮助我缩小 make 行为的原因的范围吗?
我认为有些混乱:make
之后的数字不是线程号。 Make实际上不是多线程的,它是单线程的。
该数字是正在调用的递归生成过程的深度。无论您的 -j
值有多大(或多小),它总是会显示完全相同(给定相同的目标),因为它表示已调用了多少个 make 的递归实例。
也就是说,如果你有类似的东西:
recurse:
$(MAKE) ...
那么来自 make 的顶级实例的消息将是 make
,而来自 recurse
配方调用的子 make 的消息将是 make[1]
,等等
无论我传递什么 --jobs
参数,我总是得到 4 个线程。
在 make --jobs=1 target
期间,我可以看到以 make[1]:
、make[2]:
、make[3]:
和 make[4]:
开头的标准输出行,而我只希望有一个线程。
如果我使用 make --jobs=100 target
,结果相同,我得到 4 个线程而不是 100 个。
我不确定这是否相关,但我 运行 在 docker 容器中创建 docker 我的 7 个本地主机核心可用。
>docker info
Operating System: Docker Desktop
OSType: linux
Architecture: x86_64
CPUs: 7
在 Alpine Linux docker 容器内
>make --version
GNU Make 4.2.1
Built for x86_64-alpine-linux-musl
>grep -c ^processor /proc/cpuinfo
7
确认容器获得 7 个内核。
有什么我可以 运行 帮助我缩小 make 行为的原因的范围吗?
我认为有些混乱:make
之后的数字不是线程号。 Make实际上不是多线程的,它是单线程的。
该数字是正在调用的递归生成过程的深度。无论您的 -j
值有多大(或多小),它总是会显示完全相同(给定相同的目标),因为它表示已调用了多少个 make 的递归实例。
也就是说,如果你有类似的东西:
recurse:
$(MAKE) ...
那么来自 make 的顶级实例的消息将是 make
,而来自 recurse
配方调用的子 make 的消息将是 make[1]
,等等