← 返回技术札记
运维实践

从 x86、x86_64 到 ARM64,一文搞懂服务器 CPU 架构

很多人下载软件时都会遇到 x86、x86_64、amd64、arm64 等各种架构名称,但真正理解它们区别的人并不多。本文带你从零开始认识服务器 CPU 架构。

linuxCPUx86_64ARMMySQL

从 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 时,就不会再感到陌生了。