Linux编译时make -j# 应该开多少个线程

2021第2次更新

对于这个问题,当时的我没有学过操作系统。网上问人才搞明白。这里首先要明白线程和进程的区别。
一个程序,被编译为可执行程序,放在硬盘里。当这个可执行文件被读入到内存,进行执行的时候。程序变成了进程。
如果想在进程里,并行执行多个任务,就是多线程技术。例如,我们的make -j任务,想分成多少进程执行。
那么,对于普通单核cpu来说,并发其实是分时间运行,对于多核cpu,每个核心可以分配至少一个进程:
在这里插入图片描述

之后,有公司升级了cpu的进程性能,可以做个一个cpu核心,真正并行运行多个线程,而不是分时间并发运行。
在这里插入图片描述

那么,这个最终的答案就是,-j后面的线程,应该是核心的两倍。

2019第1次更新

make -j#编译时需要开多线程编译,节省时间。j后面的数字应该为CPU核心数的两倍。
在这里插入图片描述
比如,这个电脑。8-CORe,8核心,则make -j16

一个CPU核心,就是一个大脑,一个大脑可以同时做两件事。

这个就是英特尔公司超线程技术,CPU 内部由 ALU 和 寄存器组成,ALU 很复杂,所以可以做到两组寄存器共享一个 ALU,在其中一个寄存器在读取数据时(比如 cache miss 导致的多周期等待),另外一个寄存器如果有数据,就可以利用该 ALU。从逻辑上来看就像两个核心一样,只是说无法达到预期的 200 % 的并行率。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值