📄 一句话概括
一台服务器要同时陪成百上千个客户端——靠多任务:fork 子进程(内存独立)、多线程(共享内存)或 inetd(总机转接、按需启动)。
📝 本节和前面几节的关系
6.1.1 说了服务器在等待;本篇看它怎么同时陪很多客人。
一、为什么要多任务
等待是常态,但客人随时可能来—— 服务器程序必须做到多人同时服务,不能排队一个一个来。
二、三种形态
fork 子进程:每个客人复制一个程序副本,内存独立、隔离好; 多线程:一个进程里分多条执行线,共享内存、更轻量; inetd:总机程序先接客,确认端口有活再启动真正的服务程序。
三、动手 Demo:一台服务器怎么陪多个客人
服务器程序的多任务形态:
for a, b, c in [('fork 子进程','每个客人复制一个副本','内存独立,隔离好'),
('多线程','一个进程里分多条线','共享内存,更轻量'),
('inetd','总机先接,有活再叫人','不常驻,按需启动')]:
print('%-12s %-16s %s' % (a, b, c))
实跑输出:
--------------------------------------------------------------------
一台服务器怎么陪多个客人
--------------------------------------------------------------------
服务器程序的多任务形态:
形态 做法 特点
----------------------------------------------------------
fork 子进程 每个客人复制一个副本 内存独立,隔离好
多线程 一个进程里分多条线 共享内存,更轻量
inetd 总机先接,有活再叫人 不常驻,按需启动
----------------------------------------------------------
共同目标:**同时陪好成百上千个客户端**。
⭐ 2026 现状:Nginx 等用事件驱动(异步)把并发做到极致——但【同时陪多个客人】的目标没变。
30 秒实验
- 说说多进程与多线程各自的优缺点。
- 查查 inetd 现在还管哪些小服务。
- 想想事件驱动为什么比每客一线程省。
常见误区
- 以为服务器一次只服务一个——多任务是基本盘。
- 以为 inetd 已彻底消失——轻量场景仍在用。
自测三问(点开对答案)
1. 多任务要解决什么? —— 同时服务多个客户端。 2. fork 与线程的关键差异? —— 内存独立 vs 共享内存。 3. inetd 的角色? —— 总机:有连接才启动真服务。- ☐ 下一节(6.1.3 服务器的套接字和端口号)
相关笔记
- 协议栈的内部结构 — 套接字的客户端侧
- 1.1-1.3 系统与司令塔(系统与服务器、使用形态、被动式运用形态) — 服务器的形态
- 🔌 网络是怎样连接的 · 索引