gpt4 book ai didi

docker - 无论--jobs是什么,GNU Make仅使用4个线程

转载 作者:行者123 更新时间:2023-12-02 20:33:25 26 4
gpt4 key购买 nike

无论我传递什么--jobs参数,我总是得到4个线程。

make --jobs=1 target期间,当我只希望有一个线程时,可以在以make[1]:make[2]:make[3]:make[4]:开头的stdout行上看到。

如果我使用make --jobs=100 target,结果也一样,我得到4个线程而不是100个线程。

我不确定这是否相关,但是我在docker容器中运行make,并且docker有7个可用的localhost核心可供使用。

>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],等等。

关于docker - 无论--jobs是什么,GNU Make仅使用4个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60085722/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com