加油口,电梯门的对称性对 TCP/IP 传输协议的启示

春节期间河南穷游屡次加油站排队加油之启示。

不考虑有意的设计因素,汽车加油口概率性分布在车身的左边或者右边,这个偶然的小细节让加油机同时为两辆车加油而无需额外的加油管。

如果所有车辆加油口都在同一侧,加油站的加油机就只能给一边的车加油,高峰期容易造成拥堵,加油效率低下,或者加长一根加油管,用飞线的方式跨过紧靠加油机的车辆为远离加油机的车辆加油,资源浪费。加油口分设在左右两侧,能让车辆从不同方向停靠加油机,加倍了加油站吞吐,提高加油效率。

类似的例子还有多侧开门的电梯,这让楼层布局摆脱了电梯井的位置约束,从而可以设计出更加多样性的楼层布局,设电梯的四边门编号为 1,2,3,4,比如经理在大厅从电梯 1 号门进入,到达目标楼层可以从背向的 3 号门走出,这就允许目标楼层在任何方向敞开,大大缩短了穿皮鞋走路的距离。

比如港口,煤矿,油田装货卸货设施,远距离输电设施等,均有类似的小细节,但由于这些设施与大多数人日常生活无关,这类例子不再赘述。

所有类似设计背后的哲学很简单,就是对称性。增强对称性就意味着高性能,反之则意味着高稳定。

在设计传输协议时,有单接收 buffer 和多接收 buffer 之选择,显然 TCP 是单 buffer。类比加油站,装卸货等设施,如果新的传输协议同时使用两个或更多 buffer,将会高尚。

当数据到达时,接收例程选择一个没有被进程上下文 lock 的 buffer,将数据 queuing,随后携带若干 buffer 共同维护的共享接收状态返回 sender,这些状态或许是一个 bitmap,或许是 SACK 链,这些不重要。这种方式摆脱了 TCP 串行接收的约束,除非所有 buffer 均被 lock,否则不必将 data 放入 backlog。这种方式解耦了接收和包括可靠和保序之类的处理,当然,如果你的协议是尽力而为的,把处理逻辑留空,pass through 即可。

如果在用户上下文自行处理可靠,保序等逻辑,可想而知只有一个或至多线程数量的 buffer 被 lock,只要 buffer 数量足够多,接收上下文总能 queuing data,这才是真正的样子。

这将极大提高传输吞吐。因为我们知道,制约吞吐的大障碍就是串行化,之所以必须串行化,其原因是可靠性处理,然而处理可以拨离到单独的上下文,与接收上下文流水线化,这种表象化的思路背后就是加层解耦,但实质则是对称化。

再回到加油站。

也许加油口的位置设计与左舵右舵有关,如果加油口固定在左侧,靠右行驶的车辆靠路边加油没问题,而靠左行驶的车辆只能在中间岛加油,为统一加油站的设施规格,加油口就得置于右侧。这些约束太严格了,但在加油站内部,松散约束并没什么大问题,这是独立的上下文,与上路情形的规则完全解耦,因此,只要在加油站内部同时允许靠左,靠右行驶就行了。

浙江温州皮鞋湿,下雨进水不会胖。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/70903.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络工程师 (30)以太网技术

一、起源与发展 以太网技术起源于20世纪70年代,最初由Xerox公司的帕洛阿尔托研究中心(PARC)开发。最初的以太网采用同轴电缆作为传输介质,数据传输速率为2.94Mbps(后发展为10Mbps),主要用于解决…

ONES 功能上新|ONES Copilot、ONES TestCase、ONES Wiki 新功能一览

ONES Copilot 支持基于当前查看的工作项相关信息,利用 AI 模型,在系统中进行相似工作项的查找,包括基于已关联工作项的相似数据查找。 应用场景: 在查看工作项时,可利用 AI 模型,基于语义相似度&#xff0c…

从 X86 到 ARM :工控机迁移中的核心问题剖析

在工业控制领域,技术的不断演进促使着工控机从 X86 架构向 ARM 架构迁移。然而,这一过程并非一帆风顺,面临着诸多关键挑战。 首先,软件兼容性是一个重要问题。许多基于 X86 架构开发的工业控制软件可能无法直接在 ARM 架构上运行…

《qt open3d网格平滑》

qt open3d网格平滑 效果展示二、流程三、代码效果展示 二、流程 创建动作,链接到槽函数,并把动作放置菜单栏 参照前文 三、代码 1、槽函数实现 void on_actionFilterSmoothSimple_triggered();void MainWindow::on_actionF

Redis 的缓存雪崩、缓存穿透和缓存击穿详解,并提供多种解决方案

本文是对 Redis 知识的补充,在了解了如何搭建多种类型的 Redis 集群,并清楚了 Redis 集群搭建的过程的原理和注意事项之后,就要开始了解在使用 Redis 时可能出现的突发问题和对应的解决方案。 引言:虽然 Redis 是单线程的&#xf…

路由过滤方法与常用工具

引言 在前面我们已经学习了路由引入,接下来我们就更进一步来学习路由过滤 前一篇文章:重发布:路由引入(点击即可) 路由过滤 定义:路由器在发布或者接收消息时,可能需要对路由信息进行过滤。 作用…

元宵佳节,我的创作纪念日:技术之路的回顾与展望

今天是元宵节,一个象征着团圆与美好的节日。巧合的是,今天也是我作为技术博客博主的创作纪念日。在这个特别的日子里,我想和大家分享我的创作故事,回顾初心、总结收获、展望未来,同时也希望能为正在技术道路上探索的你…

【STM32】H743的以太网MAC控制器的一个特殊功能

调试743的MAC,翻阅手册的时候,发现了一个有意思的功能 混杂模式 H743的MAC控制器,可以设置为混杂模式,这就意味着它可以做一些网络监控的应用,譬如连接具备端口镜像功能的交换机,然后直接代替PC实现网络数据…

一个AI应用的开发、上线流程解析

目录 1. 模型文件格式 1.1 CheckPoint (ckpt) 文件格式 1.2 .pth 文件格式 1.3 .mindir 文件格式 1.4 .onnx 文件格式 2. 推理(Inference) 2.1.pth (PyTorch模型格式) 2.2 .mindir (MindSpore模型格式) 2.3.onnx (开放神经网络交换格式) 2.4实…

使用grafana v11 建立k线(蜡烛图)仪表板

先看实现的结果 沪铜主力合约 2025-02-12 的1分钟k线图 功能介绍: 左上角支持切换主力合约,日期,实现动态加载数据. 项目背景: 我想通过前端展示期货指定品种某1天的1分钟k线,类似tqsdk 的web_gui 生成图形化界面— TianQin Python SDK 3.7.8 文档 项目架构: 后端: fastap…

【C++】解锁<list>的正确姿势

> 🍃 本系列为初阶C的内容,如果感兴趣,欢迎订阅🚩 > 🎊个人主页:[小编的个人主页])小编的个人主页 > 🎀 🎉欢迎大家点赞👍收藏⭐文章 > ✌️ 🤞 &#x1…

JUC并发—1.Java集合包底层源码剖析

大纲 1.为什么要对JDK源码剖析 2.ArrayList源码一:基本原理以及优缺点 3.ArrayList源码二:核心方法的原理 4.ArrayList源码三:数组扩容以及元素拷贝 5.LinkedList源码一:优缺点和使用场景 6.LinkedList源码二:双…

修改docker内容器中的某配置文件的命令

先找到配置文件config.php find / -name "config.php" 2>/dev/null 然后用vi编辑器修改配置文件 vi /var/www/config.php 最后就是vi的基本操作,根据具体需求使用: vi 有两种主要模式: 命令模式:进入 vi 后的默认…

一竞技瓦拉几亚S4预选:YB 2-0击败GG

在2月11号进行的PGL瓦拉几亚S4西欧区预选赛上,留在欧洲训练的YB战队以2-0击败GG战队晋级下一轮。双方对阵第二局:对线期YB就打出了优势,中期依靠卡尔带队进攻不断扩大经济优势,最终轻松碾压拿下比赛胜利,以下是对决战报。 YB战队在天辉。阵容是潮汐、卡尔、沙王、隐刺、发条。G…

使用Docker部署MySQL 5.7并配置防火墙

步骤1: 切换到超级用户 首先,打开终端,输入以下命令切换到超级用户(root): su 然后输入您的root密码。 步骤2: 启动Docker服务 确保Docker服务已经启动。可以使用如下命令启动Docker(如果它尚未运行):…

vue elementui select下拉库组件鼠标移出时隐藏下拉框

方案&#xff1a; select 监听 mouseleave事件&#xff0c;当鼠标离开时通过唯一标识ref设置select 下拉框隐藏&#xff0c;并做失焦 <el-select v-model"value" :popper-append-to-body"false" class"select_drop_inner" size"sm…

国产操作系统安装DeepSeek

从年前到现在&#xff0c;DeepSeek这款语言AI模型&#xff0c;一经发布直接在全球爆火&#xff0c;在热搜上更是牢牢占据一席之地。无论是技术大神&#xff0c;还是紧跟潮流的技术小白&#xff0c;都被它强大的自然语言处理能力所吸引。作为国产操作系统的用户&#xff0c;千万…

记使用AScript自动化操作ios苹果手机

公司业务需要自动化操作手机&#xff0c;本来以为很困难&#xff0c;没想到使用AScript工具出乎意料的简单&#xff0c;但是还有很多坑存在&#xff0c;写个博客记录一下。 工具信息&#xff1a; 手机&#xff1a;iphone7 系统版本&#xff1a;ios15 AScript官方文档链接&a…

关于conda换镜像源,pip换源

目录 1. 查看当前下载源2. 添加镜像源2.1清华大学开源软件镜像站2.2上海交通大学开源镜像站2.3中国科学技术大学 3.删除镜像源4.删除所有镜像源&#xff0c;恢复默认5.什么是conda-forge6.pip换源 1. 查看当前下载源 conda config --show channels 如果发现多个 可以只保留1个…

Springboot 中如何使用Sentinel

在 Spring Boot 中使用 Sentinel 非常方便&#xff0c;Spring Cloud Alibaba 提供了 spring-cloud-starter-alibaba-sentinel 组件&#xff0c;可以快速将 Sentinel 集成到你的 Spring Boot 应用中&#xff0c;并利用其强大的流量控制和容错能力。 下面是一个详细的步骤指南 …