别再傻傻分不清!双工、半双工、全双工,用计算机和生活的“对讲机”讲透它 前言面试官问“TCP 是全双工还是半双工” 你心里默念“双工、半双工、全双工……”嘴上却开始支吾。今天我用CPU 流水线 微信群聊 对讲机一次性帮你焊死这个知识点。摘要本文从硬件、协议和操作系统层面解析双工、半双工、全双工的核心差异在于“同一时刻能否同时收发”。半双工共用单信道分时传输需冲突检测典型如对讲机、集线器和Wi-Fi实际分时复用效率低且延迟高全双工拥有独立收发通道可同时双向通信无需冲突检测如电话、交换机以太网和PCIe总线操作系统体现为独立Socket缓冲区。澄清常见误区TCP虽全双工但可跑在半双工链路蓝牙常因省电降为半双工Wi-Fi标称带宽并非上下行同时可达。提供“三问法”快速判断并以双核流水线类比全双工、单核轮转类比半双工。目录1. 一句话破题先记住“核心动作”2. 计算机底层视角从总线到网卡2.1 物理层一根线 vs 两根线2.2 数据链路层MAC 状态机2.3 操作系统层面Socket 读写缓冲3. 生活场景“三件套” —— 秒懂区别4. 那些让你“纠结”的擦边球4.1 “蓝牙耳机”是半双工还是全双工4.2 “Wi-Fi”是半双工5. 实战判断“三问法”6. 一张表终结所有疑问7. 计算机面试高频题附答案8. 总结用计算机思维记忆1. 一句话破题先记住“核心动作”双工Duplex通信双方都能收发数据的能力——这是总称。半双工Half-Duplex同一时刻只能一方发、一方收轮流来。全双工Full-Duplex同一时刻双方可以同时发和收。关键不在“能不能”而在“能不能同时”。2. 计算机底层视角从总线到网卡2.1 物理层一根线 vs 两根线半双工共用一条传输通道比如一根同轴电缆。发信号时占住总线收信号时释放——冲突域里必须靠 CSMA/CD载波监听多路访问/冲突检测来抢时间片。全双工使用两条独立的物理通道发送线 Tx 接收线 Rx比如网卡里的双绞线8 芯中 4 芯用于收发。收发互不干扰同时进行。计算机内部总线如 PCIe采用全双工点对点连接所以 CPU 能一边从内存读数据一边向显卡写指令——这不是“并发”这是真正的“并行”。2.2 数据链路层MAC 状态机半双工时网卡工作在“半双工模式”需要启用流控和冲突检测全双工时关闭 CSMA/CD直接收发包效率翻倍。一个经典误区“TCP 是全双工协议所以底层网卡一定全双工。”——错TCP 可以在半双工链路上跑比如老式 10M 集线器但性能会打骨折。现代交换机强制全双工是因为交换机能隔离冲突域。2.3 操作系统层面Socket 读写缓冲全双工在 OS 里体现为独立的发送缓冲区和接收缓冲区。你调用send()的同时另一线程可以recv()内核互不阻塞。c// 全双工 Socket 示例伪代码 while (true) { // 子线程1持续发送 send(sockfd, data, len, 0); // 子线程2同时接收 recv(sockfd, buf, size, 0); }半双工如果强行双线程同时读写底层会串行化一个操作等待另一个完成效率下降。3. 生活场景“三件套” —— 秒懂区别场景类型为什么对讲机walkie-talkie半双工按住“通话键”时只能说话松手后才能听对方。同一时刻只能一个人讲。电话 / 微信语音通话全双工双方可以同时说话、同时听到对方互不干扰靠两条音频通道。单行道 双向红绿灯半双工同一时间只允许一个方向的车流通过另一个方向等待。双向四车道高速公路全双工去程和返程各两条车道同时并行。微信群“所有人”后禁言单工单向但双工一般指双向单工不属于这里但提一下比如广播电台。4. 那些让你“纠结”的擦边球4.1 “蓝牙耳机”是半双工还是全双工经典蓝牙HFP 协议支持全双工因为手机和耳机同时收发音频。但很多廉价耳机为了省电把上行麦克风和下行扬声器分时复用实际上是半双工——所以你打游戏时开麦背景音会变单声道那就是被切成半双工了。4.2 “Wi-Fi”是半双工对虽然你感觉能同时下载和上传但 Wi-Fi802.11在物理层是半双工——所有终端共用同一信道同一时刻只能一个设备发送或接收加上 OFDMA 也只是分时片。所以 Wi-Fi 速率标称“总带宽”不是“上下行同时达到”。而有线以太网交换机直连是全双工——上下行可以同时跑满所以延迟和抖动更稳定。5. 实战判断“三问法”下次见到任何通信系统问自己三个问题物理上有没有两条独立通道线、频率、时间槽协议允许双方同时发吗看是否有冲突检测或收发包调度实际体验中一方发数据时另一方能否同时发而不丢包6. 一张表终结所有疑问维度半双工全双工传输通道共用一条两条独立Tx/Rx同时收发❌ 不可以✅ 可以冲突处理需要 CSMA/CD 或令牌不需要典型硬件集线器、对讲机、Wi-Fi、RS-485交换机、电话、光纤、PCIe效率低浪费一半时间高理论 2 倍延迟有等待延迟无等待延迟7. 计算机面试高频题附答案Q为什么 TCP 是全双工而 HTTP/1.1 是半双工ATCP 是传输层协议提供双向独立信道HTTP/1.1 是应用层协议采用“请求-响应”模型同一时刻只能一个请求或一个响应所以应用层行为是半双工。HTTP/2 支持多路复用可近似全双工。Q串口UART是全双工吗A看模式。标准 UART 有 TX/RX 两根线支持全双工但 RS-232 某些只接 3 根线的简化版只能半双工。8. 总结用计算机思维记忆全双工 双核流水线取指和执行同时半双工 单核轮转时间分片双工 能力集只要是双向通信就是双工记住全双工是“同时双向”半双工是“轮流双向”单工是“单向”。下次再看到“双工”二字先问自己同一秒它能不能同时说话和听话如果觉得这篇文章帮你理清了点个赞转发给那个还在纠结的朋友。评论区留下你的“生活场景”一起补充脑洞本文原创首发于 CSDN转载注明出处。