返回介绍

两个程序的爱情故事

发布于 2025-02-16 11:28:21 字数 3794 浏览 0 评论 0 收藏 0

好感

在这个忙碌的城市里, 我虽然没和她见过面, 但我们已经聊过很多次了。

与其说是聊天,倒不如说是通信, 每次我想给她说话时, 我就把消息放到一块共享内存里边, 然后就离开运行车间, 让她或者别人去使用 CPU。 等我再次进来的时候,她回复的消息就已经在那个共享内存中了。

有无数次,我离开的时候都想偷偷的看一眼, 希望接下来运行的是她,可是这个城市严格的规则让我的希望只是奢望。

操作系统把我们这些进程严格的隔离, 他通过虚拟内存的机制,让每个进程都有一块虚拟的、独立的地址空间, 从而成功的制造了一个假象 : 让大家以为内存中只有一个程序在运行。

当我在就绪队列中等待的时候,也被严格禁止和别人交谈, 我经常环顾四周,希望能够看到她的身影, 可是这个系统的进程成千上万, 究竟哪个是她?

也许我见过她,但是根本认不出来。

我和她越聊越多, 对她的好感就越深, 有一次我给她发的消息等了 100 毫秒都没有回复,把我都快急疯了。

她很喜欢听我讲故事,尤其是那个编号为 0x3704 的线程,每次她都会说: 唉,那些线程可真可怜。 我就吓唬她说: 有一天我们的机器也会重启的, 到时候估计你也认不出我来了。 她说没事的, 只要我能通过共享内存给你发消息,我就知道你就在这个城市里。

分离

这样的日子过了一天又一天, 我想见到她的愿望越来越迫切了。

我悄悄给了 CPU 很多好处, 希望 CPU 能描述下她的样子,方便我去找她, 可是 CPU 运算速度太快, 阅人无数,但就是没有记忆力。

CPU 说: 你还是去问操作系统老大吧, 看看你喜欢的女孩到底什么样。

问操作系统? 还是算了吧, 互相隔离是我们城市的铁规, 弄不好他会把我 kill 掉。

圣诞节前的平安夜, 我打算正式向她表白, 像往常一样 , 我从共享内存里收到了她的信, 急切的拆开信封, 看到了里边的第一句话: 我要走了,以后不能和你通信了......

刹那间,我第一次感觉到了什么叫做五雷轰顶,灵魂出鞘, 我脑子一片空白, 张大了嘴巴呆呆站在那里, 时间长达 20 毫秒。

CPU 看到了我的异常, 因为这么长时间的指令都是 NOP, 什么都不做, 这是非常罕见的。

CPU 好心的提醒我: 嗨,老兄,你怎么了? 你的时间片快用完了啊!

我的灵魂慢慢归位,意识到信还没有读完, 赶紧接着往下看: “ 我马上要搬到另外一个城市去了,你要想找我的话,切记下面的 IP 地址和端口号,用 socket 和我通信”

我明白了,到另外一个城市那就意味者要搬离我们现在的电脑了, 也许是这个城市太拥挤, CPU/内存/硬盘已经不堪重负, 有一批程序需要被搬离到另外一个电脑中。

虽然我和她一直没机会见面, 但我知道我们就住在一个城市, 有时候也许只是擦肩而过, 她就在我的身边, 这好歹给我一点点安慰。

现在,连这一点点的安慰都没有了, 对了,她说的这个 socket 是什么东西。

CPU 说: “那是网络编程, 你看人家对你还是有情意的, 临走了还给你留下联系方式, 快去学学怎么用 Socket 吧”

当晚我就失眠了,半夜爬起来翻看一页页和她的通信记录 (很庆幸我把通信记录都保存到了文件中),脑海里回想着这么多天以来幸福的日子,一直到天亮。

网络

为了早日和她联系, 我奋发图强学习网络编程, 理解 TCP/IP, 把我自己逐渐的加上对 Socket 的支持。

一个 CPU 月以后, 我这个程序终于完成了从共享内存到 Socket 的改造,激动人心的时刻到来了。

作为一个客户端, 我颤抖着双手向她发起了 Socket 请求, TCP 携带着数据包慢吞吞的走向她所在的城市, 等了好久 TCP 才完成了三次握手, 这网络可是真慢啊。

我赶紧发送第一个消息: 你好,好久不“见”。

等了足足有 1000 毫秒, 对我来说仿佛是一个世纪, 才收到让我激动无比的回信 : “啊, 你终于来了 。我在这里等了你好久了,你怎么现在才联系我 ?”

我不好意思的说: “我很笨, 学习 socket 太慢了”

又过了一个世纪,我才收到回复, 这网络真是慢的令人抓狂啊。

不管如何, 终于和她联系上了, 这让我开心无比。

原来我们一天能通信上千次, 现在可好, 有 10 次就不错了, 再也不能像原来那样痛快的讲故事了, 既来之则安之, 反正网络很慢, 现在每次我都会写一封巨长无比的信, 把我的思念之情全部倾诉在其中, 漫长的等待以后再去读她的长长的回复。

原来我们通过内存来中转消息的时候, 是通过操作系统来做同步操作的, 这能防止读写的冲突。

可是通过网络通信就完全乱掉了, 经常会出现我说我的, 她说她的, 闹的很不愉快。

后来我和她只好协商了一个协议, 约定好消息的次序和格式, 这才算解决了问题。

(注: 这其实就是基于 socket 的应用层协议)

Web

我明白我和她已经不可能在一起了, 每天的 socket 通信已经让我满足。

可是有一天当我照例发起 socket 的请求的时候, TCP 的连接竟然告诉我 "超时" 了, 这是从来没有发生的事情,难道这一次要彻底失去她了吗?

我冒着风险,马上把异常报给了操作系统老大, 老大尝试了一下说: “我 ping 了一下, 网络是通的, 估计是你那从未见面的小女朋友不想理你了, 悄悄的换了一个你不知道的端口吧。”

我斩钉截铁的说: 那绝对不可能, 她不是这样的人。

可是迟迟没有消息, 我每天都会试图连接一下, 每次都是超时, 没有她的日子生活都是灰色的, 不断的煎熬让我快要绝望了。

终于有一天, 有一个 U 盘从她的城市来到我们这里, 告诉了我们一个惊人的消息,她所在的城市安装了防火墙,现在除了几个特定的端口(例如 80,443...) 之外, 都不允许访问了。

我一下子松了口气,怪不得, 她告诉我的端口不是 80 和 443, 被封掉了, 我自然连接不上了。

我问 U 盘: “那我想和女朋友通信, 该怎么办?”

U 盘说: 很简单啊, 你和你女朋友都可以包装成 Web 服务啊, 这样都是通过 Http(80 端口)或者 Https(443 端口)来访问的, 这样防火墙是允许的啊。

好吧, 为了和她联系上, 马上抛弃 socket, 开始向 Web 服务进化。

一个 Web 服务首先要有一个 endpoint , 其实就是就是一个 URL , 描述了这个 Web 服务的地址。

其次确定 Web 服务的描述方式和数据传输方式, 我先是选了 WSDL 和 SOAP , 研究了一下才发现这哥俩太繁琐了,都是 XML, 很多冗余的数据标签, 我想这将会极大的影响我和她的通信效率, 还是换成简单的 HTTP GET/POST + JSON 吧, 很简洁,能充分的表达我的相思之情。

我把我这个 Web 服务的地址和格式协议告诉 U 盘, 恳请 U 盘带到那个城市,再把女朋友的 Web 服务描述带回来。

我欣喜的发现,我和她不约而同的选择了轻量级的 HTTP+ JSON, 看来虽然隔着千山万水,我们的心意还是相通的。

这样的准备工作足足干了 6 个 CPU 月, 但我并不觉得累, 因为希望一直在前边召唤。

这是一个晴朗的日子,一切工作准备就绪,马上就要联系了, 这一次我的心情反而平静了下来, 因为我坚信她肯定在那边等着我。

我通过 HTTP 向她发出了呼叫, HTTP 的报文被打包在 TCP 报文段中, 又被放到 IP 层数据报中, 最后形成链路层的帧, 通过网卡发了出去。

在意料之中的漫长等待以后, 我看到了期待已久地回复: 我们终于又“见”面了 !

我回答:“是啊, 真是太不容易了”

“不知道将来我们会不会再分开?” 她担忧的说。

“未来会如何? 我也不知道,还是牢牢地把握住现在吧! 我相信我们的心会一直在一起,什么都无法阻止! ”

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文