docker - 不管 --jobs 是什么,GNU Make 只使用 4 个线程
问题描述
无论--jobs
我提出什么论点,我总是得到 4 个线程。
在我可以看到以,make --jobs=1 target
开头的标准输出行时,我只期望一个线程。make[1]:
make[2]:
make[3]:
make[4]:
如果我使用相同的结果make --jobs=100 target
,我得到 4 个线程而不是 100 个。
我不确定这是否相关,但我在 docker 容器中运行 make 并且 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实际上不是多线程的,它是单线程的。
该数字是正在调用的递归 make 进程的深度。无论您的值有多大(或小),它总是显示完全相同(给定相同的目标)-j
,因为它表示已调用了多少 make 递归实例。
也就是说,如果你有类似的东西:
recurse:
$(MAKE) ...
然后来自 make 的顶级实例的消息将是 ,来自配方make
调用的子 make 的消息将是,等等。recurse
make[1]
推荐阅读
- php - 如何使用 PhpStorm 配置 PHP 内置 Web 服务器
- php - 带有 PHP 的 ReCaptchaV2
- java - 使用 REST API 返回不同的 xml 响应 + Java
- c++ - 当您可以将所有内容都放在 .cpp 文件中时,为什么还要使用 .h 文件?
- c - 谁能解释这里如何使用 getchar 来输入数字序列?
- c# - 关于 VS 2013 的 Nuget 包管理器
- ruby-on-rails - 我的 Rails 应用程序中的 Anylogin 密钥要求错误
- java - 我的桌面应用程序无法使用 apache Oauth Client 调用 API 来获取令牌
- java - @JsonInclude(JsonInclude.Include.NON_EMPTY) 当我使用包装类并返回结果时不起作用
- r - 如何交替使用向量列表(正则表达式)