理解并发:一个 HTTP 请求到后端到底发生了什么?

理解并发:一个 HTTP 请求到后端到底发生了什么? 在开发后端系统时,我们经常会看到这样的描述: “这个接口支持 1000 并发。” 但“1000 并发”到底意味着什么? 是不是意味着服务器同时启动 1000 个线程? 是不是意味着 CPU 同时执行 1000 个请求? 如果一个请求正在等待 MySQL,CPU 又在做什么? 一个 PHP/Hyperf 服务为什么可以同时处理大量 HTTP 请求? 要真正理解高并发,不能一开始就从 QPS、限流、缓存这些概念入手,而应该先理解一个最基本的问题: 一个 HTTP 请求进入后端以后,到底发生了什么? 1. 先理解什么是并发 并发(Concurrency)描述的是: 多个任务在同一个时间段内处于进行状态,并且它们的执行过程存在交错。 并发和并行(Parallelism)不是同一个概念。 例如: 任务 A:████████ 任务 B: ████████ 两个任务都在进行,但可能只有一个 CPU 核心。 CPU 可以先执行 A: A A A A 然后因为 A 正在等待 IO,转而执行 B: A A → 等待 ↓ B B B B 这属于并发。 如果机器有多个 CPU 核心: CPU Core 1:A A A A CPU Core 2:B B B B 两个任务可以在同一时刻真正执行,这才是并行。...

2024年06月10日 · 5 min · Leanku

Socket 详解:应用程序如何进行网络通信

Socket 详解:应用程序如何进行网络通信 上一篇《TCP/IP 详解:理解互联网通信的基础》文章介绍了 TCP/IP。 我们知道: 应用层 ↓ TCP / UDP ↓ IP ↓ 网络 TCP/IP 负责完成网络通信,但应用程序并不会直接操作 TCP 报文或者 IP 数据包。 应用程序通常通过操作系统提供的 Socket API 来使用网络能力。 因此,如果 TCP/IP 是网络通信的基础,那么 Socket 就是: 应用程序进入网络世界的接口。 对于后端开发来说,理解 Socket 非常重要。 HTTP Server、MySQL、Redis、RPC、WebSocket,以及各种 TCP 长连接服务,底层都离不开 Socket。 1. Socket 到底是什么? Socket 通常翻译为“套接字”。 它不是一个网络协议,而是一种网络通信接口和抽象。 应用程序可以通过 Socket: 创建通信端点 绑定地址 建立连接 发送数据 接收数据 关闭连接 例如 TCP 服务端的典型流程: socket() ↓ bind() ↓ listen() ↓ accept() ↓ read() / write() ↓ close() 客户端则通常是:...

2023年07月18日 · 6 min · Leanku