从 x86、x86_64 到 ARM64,一文搞懂服务器 CPU 架构
无论是部署 MySQL、安装 Docker、下载 Go SDK,还是选择 Linux 镜像,我们都会看到各种各样的架构名称:
- x86
- x86_64
- amd64
- arm64
- aarch64
- i386
- i686
很多人第一次看到都会疑惑:
我的服务器到底应该下载哪个?
x86_64 到底是不是 amd64?
Intel 为什么下载 AMD 的版本?
其实,这些名称背后代表的是 CPU 指令集架构(Instruction Set Architecture,ISA)。理解它们,对于开发、运维以及服务器部署都十分重要。
一、什么是 CPU 架构?
CPU 架构可以理解成 CPU 能够理解的一套“语言”。
程序并不是直接运行的。
例如下面这段 Go 代码:
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
经过编译以后,会变成:
机器指令
CPU 根据这些机器指令执行程序。
不同 CPU 的指令完全不同,因此:
一个程序必须编译成对应 CPU 能理解的机器码。
这也是为什么下载软件时必须选择对应架构。
二、常见 CPU 架构
目前服务器主要分为两大阵营。
CPU
├── x86 系列
│ ├── x86(32位)
│ └── x86_64(64位)
│
└── ARM 系列
├── ARM32
└── ARM64
其中:
- PC、服务器大部分采用 x86_64
- 手机、平板基本都是 ARM
- Apple M 系列芯片也是 ARM64
三、什么是 x86?
x86 最早来源于 Intel 的处理器型号。
例如:
8086
80186
80286
80386
80486
后来大家就把这一整套指令统称为:
x86
严格来说:
x86 指的是 32 位架构。
因此我们经常还能看到:
i386
i486
i586
i686
这些都是 x86 家族。
如果软件写着:
x86
通常表示:
32 位程序
四、什么是 x86_64?
随着内存越来越大,32 位 CPU 已经无法满足需求。
于是 AMD 在 x86 基础上设计了一套:
64 位扩展指令集
于是诞生了:
x86_64
它能够:
- 支持 64 位寄存器
- 支持更大的内存
- 支持更多 CPU 指令
- 性能更高
现在几乎所有服务器都是:
x86_64
五、为什么又叫 amd64?
很多人第一次安装 Ubuntu 都会看到:
ubuntu-24.04-live-server-amd64.iso
心里会想:
我明明是 Intel CPU,为什么下载 AMD?
其实:
AMD 最早设计出了这套 64 位架构,因此官方命名:
AMD64
后来 Intel 发现这套设计非常成功,于是也直接兼容了 AMD64。
所以今天:
Intel CPU
│
▼
AMD64
完全没有问题。
Linux 社区基本统一使用:
amd64
而 CentOS、RHEL 更喜欢叫:
x86_64
实际上:
amd64 == x86_64
它们表示的是同一种架构。
六、什么是 ARM64?
ARM 与 x86 完全不同。
它最初主要应用于:
- 手机
- 平板
- 嵌入式设备
后来随着云计算的发展:
越来越多服务器开始采用 ARM。
例如:
- Apple M1
- Apple M2
- Apple M3
- Apple M4
- 华为鲲鹏
- AWS Graviton
- 阿里云倚天710
这些都属于:
ARM64
Linux 中通常又写成:
aarch64
所以:
ARM64 == aarch64
七、为什么程序不能跨架构运行?
假设:
Go 编译:
GOARCH=amd64
得到:
hello
它里面全部都是:
x86_64 指令
如果放到 ARM 服务器:
Illegal instruction
或者:
Exec format error
因为:
ARM CPU 根本看不懂 x86 指令。
这就像:
英语
↓
中文老师
当然看不懂。
八、Linux 如何查看自己的架构?
最简单的方法:
uname -m
例如:
x86_64
表示:
amd64
如果输出:
aarch64
说明就是:
ARM64
也可以:
lscpu
例如:
Architecture: x86_64
还能看到:
- CPU 型号
- 核心数
- 缓存
- NUMA 信息
对于运维来说,这是非常常用的命令。
九、下载软件时如何选择?
以 MySQL 为例:
官网可能看到:
Linux Generic (x86,64-bit)
实际上就是:
x86_64
Docker:
linux/amd64
Go:
go1.26.linux-amd64.tar.gz
Ubuntu:
amd64
CentOS:
x86_64
Windows:
x64
这些实际上都是:
64 位 x86
可以放心下载。
十、常见架构对应关系
| 名称 | 实际架构 | 位数 |
|---|---|---|
| x86 | x86 | 32 位 |
| i386 | x86 | 32 位 |
| i686 | x86 | 32 位 |
| x86_64 | amd64 | 64 位 |
| amd64 | x86_64 | 64 位 |
| x64 | x86_64 | 64 位 |
| Intel 64 | x86_64 | 64 位 |
| arm64 | ARM64 | 64 位 |
| aarch64 | ARM64 | 64 位 |
十一、运维实践中的几个典型场景
11.1 安装 MySQL
很多同学第一次下载 MySQL,会误下载:
Linux Generic (x86,32-bit)
结果:
无法启动
正确应该下载:
Linux Generic (x86,64-bit)
11.2 Docker 镜像
Docker Hub:
linux/amd64
linux/arm64
如果服务器是:
x86_64
就应该选择:
linux/amd64
11.3 Go 编译
交叉编译:
GOOS=linux GOARCH=amd64
得到:
Linux x86_64
如果:
GOOS=linux GOARCH=arm64
则生成:
ARM64 可执行文件
Go 的交叉编译能力,也是它在云原生领域广受欢迎的重要原因之一。
十二、总结
对于绝大多数开发者和运维工程师来说,只需要记住下面几句话即可:
✅ x86 = 32 位
✅ x86_64 = amd64 = x64 = Intel 64
✅ arm64 = aarch64
✅ Intel CPU 也下载 amd64,没有任何问题。
理解 CPU 架构不仅能帮助我们正确选择安装包,也能帮助我们理解容器、多架构镜像、交叉编译等现代软件工程中的许多概念。
当你下一次看到 linux-amd64 或 linux-arm64 时,就不会再感到陌生了。