当前位置: 首页 > news >正文

Socket 的两个不同含义:硬件 CPU Socket 和 网络 Socket 的区别

Socket 的两个不同含义:硬件 CPU Socket vs 网络 Socket

Socket 在计算机领域有两个完全不同的含义,容易混淆但本质不同


1. 硬件 CPU Socket(CPU 插槽)

定义

  • 指物理 CPU 插槽,主板上安装 CPU 的接口(如 Intel LGA1700、AMD AM5)。
  • 每个 Socket 可以包含一个或多个 CPU 核心(如 16 核的 Intel Xeon)。
  • NUMA 架构下,每个 Socket 有自己专属的本地内存(Local Memory)

关键特性

  • 跨 Socket 访问内存:访问其他 Socket 的内存(Remote Memory)比本地慢。
  • 优化方法:CPU 绑定、NUMA 感知内存分配(如 numactl)。
  • 影响场景:高性能计算、数据库、虚拟化等延迟敏感型应用。

示例

# 查看系统 NUMA 拓扑(Socket 数量)
numactl --hardware

输出:

available: 2 nodes (0-1)  # 2 个 Socket(NUMA 节点)
node 0 cpus: 0-15        # Socket 0 的 CPU 核心
node 1 cpus: 16-31       # Socket 1 的 CPU 核心

2. 网络 Socket(套接字)

定义

  • 网络通信的编程接口,由操作系统提供(如 socket()bind()listen())。
  • 基于 TCP/IP 协议栈,用于进程间通信(如客户端-服务器模型)。
  • 经典的 BSD Socket API 是跨平台标准(Linux/Windows/macOS 通用)。

关键特性

  • 通信端点:通过 IP + 端口标识(如 192.168.1.1:80)。
  • 工作模式
    • 流式 Socket(SOCK_STREAM):TCP,可靠传输。
    • 数据报 Socket(SOCK_DGRAM):UDP,无连接。
  • 优化方法:非阻塞 I/O、多路复用(epoll)、零拷贝等。

示例

// 创建一个 TCP Socket
int sockfd = socket(AF_INET, SOCK_STREAM, 0);

两者的核心区别

特性CPU Socket(硬件)Network Socket(软件)
本质物理 CPU 插槽操作系统提供的通信接口
作用域计算机硬件架构网络通信(进程间/跨主机)
优化目标减少跨 Socket 内存访问延迟提高网络吞吐量、降低延迟
相关技术NUMA、CPU 亲和性TCP/IP、epoll、Zero-Copy
工具/APInumactlsched_setaffinitysocket()send()recv()

为什么容易混淆?

  1. 术语重叠:英文均为 “Socket”,但中文无明确区分。
  2. 上下文依赖
    • 讨论 性能优化 时(如 NUMA),通常指 CPU Socket
    • 讨论 网络编程 时(如 RPC/HTTP),通常指 Network Socket

如何避免混淆?

  • 看上下文
    • 若提到 NUMA、多核、内存访问CPU Socket
    • 若提到 TCP/UDP、端口、网络通信Network Socket
  • 看代码/命令
    • numactl --hardware → CPU Socket。
    • socket(AF_INET, SOCK_STREAM, 0) → Network Socket。

总结

  • CPU Socket 是硬件概念,影响内存访问性能,需 NUMA 优化。
  • Network Socket 是软件接口,用于网络通信,需关注 I/O 模型。
  • 两者无关,但高性能程序中可能需要同时优化(如绑定网络线程到特定 CPU Socket)。
http://www.xdnf.cn/news/612631.html

相关文章:

  • MySQL——复合查询表的内外连
  • 第十节第七部分:Arrays类、自定义排序规则Comparable、自定义比较器Comparator
  • PHP简介
  • DEEPSEEK + 其他工具的玩法
  • 深入剖析Go并发性能瓶颈:pprof实战指南
  • 力扣面试150题--路径总和
  • Stable Diffusion底模对应的VAE推荐
  • Docker端口映射与容器互联
  • 基于JSP+MySQL 服装销售系统
  • 今日学习:AOP数据脱敏|线程池|方法引用的实例|背包(0-1)及子集
  • 什么是下一代DNS
  • 如何计算VLLM本地部署Qwen3-4B的GPU最小配置应该是多少?多人并发访问本地大模型的GPU配置应该怎么分配?
  • CustomSVG,一键生成SVG,文字秒变矢量图(WIN/MAC)
  • Vue3 + ThinkPHP8 + PHP8.x 生态与 Swoole 增强方案对比分析
  • ProfiNet转Ethernet/IP网关选型策略适配西门子S7-1500与三菱变频器的关键参数对比
  • ISO 20000体系:服务级别管理含义与解释
  • RBAC(基于角色的访问控制)模型详解:从原理到实践
  • 数据库三范式详解与应用建议
  • 汽车免拆诊断案例 | 2020款奔驰E300L车发动机故障灯偶尔异常点亮
  • 具身智能:OpenAI 的真正野心与未来展望
  • PyQt学习系列06-网络编程与通信协议
  • 1537. 【中山市第十一届信息学邀请赛决赛】未命名 (noname)
  • 74. 搜索二维矩阵
  • 论文Review 地面分割 GroundGrid
  • 方案精读:92页银行数据管控体系设计方案【附全文阅读】
  • Nginx中root与alias的区别及用法
  • TCP 三次握手,第一次握手报文丢失会发生什么?
  • 中国经济的结构性困境与制度性瓶颈:关键卡点深度解析
  • 信号与系统06-系统建模与AI融合
  • JVM—Java对象