两个程序的爱情故事(刘欣)
好感
在這個(gè)忙碌的城市里, 我雖然沒和她見過面, 但我們已經(jīng)聊過很多次了。
與其說是聊天,倒不如說是通信, 每次我想給她說話時(shí), 我就把消息放到一塊共享內(nèi)存里邊, 然后就離開運(yùn)行車間, 讓她或者別人去使用CPU。 等我再次進(jìn)來的時(shí)候,她回復(fù)的消息就已經(jīng)在那個(gè)共享內(nèi)存中了。
有無數(shù)次,我離開的時(shí)候都想偷偷的看一眼, 希望接下來運(yùn)行的是她,可是這個(gè)城市嚴(yán)格的規(guī)則讓我的希望只是奢望。
操作系統(tǒng)把我們這些進(jìn)程嚴(yán)格的隔離, ?他通過虛擬內(nèi)存的機(jī)制,讓每個(gè)進(jìn)程都有一塊虛擬的、獨(dú)立的地址空間, 從而成功的制造了一個(gè)假象 : ?讓大家以為內(nèi)存中只有一個(gè)程序在運(yùn)行。
當(dāng)我在就緒隊(duì)列中等待的時(shí)候,也被嚴(yán)格禁止和別人交談, 我經(jīng)常環(huán)顧四周,希望能夠看到她的身影, 可是這個(gè)系統(tǒng)的進(jìn)程成千上萬, 究竟哪個(gè)是她??
也許我見過她,但是根本認(rèn)不出來。
我和她越聊越多, 對(duì)她的好感就越深, ?有一次我給她發(fā)的消息等了100毫秒都沒有回復(fù),把我都快急瘋了。
她很喜歡聽我講故事,尤其是那個(gè)編號(hào)為0x3704 的線程,每次她都會(huì)說: 唉,那些線程可真可憐。 ? 我就嚇唬她說: 有一天我們的機(jī)器也會(huì)重啟的, 到時(shí)候估計(jì)你也認(rèn)不出我來了。 ?她說沒事的, 只要我能通過共享內(nèi)存給你發(fā)消息,我就知道你就在這個(gè)城市里。
(碼農(nóng)翻身注: 0x3704的故事在《我是一個(gè)線程》里)
分離
這樣的日子過了一天又一天, 我想見到她的愿望越來越迫切了。
我悄悄給了CPU很多好處, 希望CPU能描述下她的樣子,方便我去找她, ?可是CPU運(yùn)算速度太快, 閱人無數(shù),但就是沒有記憶力。
CPU說: 你還是去問操作系統(tǒng)老大吧, 看看你喜歡的女孩到底什么樣。
問操作系統(tǒng)? 還是算了吧, 互相隔離是我們城市的鐵規(guī), ? 弄不好他會(huì)把我kill掉。
圣誕節(jié)前的平安夜, 我打算正式向她表白, ?像往常一樣 , 我從共享內(nèi)存里收到了她的信, 急切的拆開信封, 看到了里邊的第一句話: 我要走了,以后不能和你通信了......
剎那間,我第一次感覺到了什么叫做五雷轟頂,靈魂出鞘, 我腦子一片空白, 張大了嘴巴呆呆站在那里, 時(shí)間長達(dá)20毫秒。
CPU看到了我的異常, 因?yàn)檫@么長時(shí)間的指令都是NOP, 什么都不做, 這是非常罕見的。
CPU好心的提醒我: 嗨,老兄,你怎么了? 你的時(shí)間片快用完了啊!
我的靈魂慢慢歸位,意識(shí)到信還沒有讀完, 趕緊接著往下看: “ 我馬上要搬到另外一個(gè)城市去了,你要想找我的話,切記下面的IP地址和端口號(hào),用socket和我通信”
我明白了,到另外一個(gè)城市那就意味者要搬離我們現(xiàn)在的電腦了, ?也許是這個(gè)城市太擁擠, CPU/內(nèi)存/硬盤已經(jīng)不堪重負(fù), ?有一批程序需要被搬離到另外一個(gè)電腦中。
雖然我和她一直沒機(jī)會(huì)見面, 但我知道我們就住在一個(gè)城市, 有時(shí)候也許只是擦肩而過, 她就在我的身邊, 這好歹給我一點(diǎn)點(diǎn)安慰。
現(xiàn)在,連這一點(diǎn)點(diǎn)的安慰都沒有了, 對(duì)了,她說的這個(gè)socket 是什么東西。
CPU說: “那是網(wǎng)絡(luò)編程, ?你看人家對(duì)你還是有情意的, 臨走了還給你留下聯(lián)系方式, 快去學(xué)學(xué)怎么用Socket吧”
當(dāng)晚我就失眠了,半夜爬起來翻看一頁頁和她的通信記錄 (很慶幸我把通信記錄都保存到了文件中),腦海里回想著這么多天以來幸福的日子,一直到天亮。
網(wǎng)絡(luò)
為了早日和她聯(lián)系, 我奮發(fā)圖強(qiáng)學(xué)習(xí)網(wǎng)絡(luò)編程, 理解TCP/IP, ? 把我自己逐漸的加上對(duì)Socket的支持。
一個(gè)CPU月以后, 我這個(gè)程序終于完成了從共享內(nèi)存到Socket的改造,激動(dòng)人心的時(shí)刻到來了。
作為一個(gè)客戶端, 我顫抖著雙手向她發(fā)起了Socket請(qǐng)求, TCP攜帶著數(shù)據(jù)包慢吞吞的走向她所在的城市, 等了好久TCP才完成了三次握手, 這網(wǎng)絡(luò)可是真慢啊。
我趕緊發(fā)送第一個(gè)消息: 你好,好久不“見”。
等了足足有1000毫秒, 對(duì)我來說仿佛是一個(gè)世紀(jì), ?才收到讓我激動(dòng)無比的回信 : “啊, 你終于來了 。我在這里等了你好久了,你怎么現(xiàn)在才聯(lián)系我 ?”
我不好意思的說: “我很笨, 學(xué)習(xí)socket 太慢了”
又過了一個(gè)世紀(jì),我才收到回復(fù), 這網(wǎng)絡(luò)真是慢的令人抓狂啊。
不管如何, 終于和她聯(lián)系上了, 這讓我開心無比。
原來我們一天能通信上千次, 現(xiàn)在可好, 有10次就不錯(cuò)了, 再也不能像原來那樣痛快的講故事了, 既來之則安之, 反正網(wǎng)絡(luò)很慢, 現(xiàn)在每次我都會(huì)寫一封巨長無比的信, 把我的思念之情全部傾訴在其中, ?漫長的等待以后再去讀她的長長的回復(fù)。
原來我們通過內(nèi)存來中轉(zhuǎn)消息的時(shí)候, 是通過操作系統(tǒng)來做同步操作的, 這能防止讀寫的沖突。
可是通過網(wǎng)絡(luò)通信就完全亂掉了, 經(jīng)常會(huì)出現(xiàn)我說我的, 她說她的, 鬧的很不愉快。
后來我和她只好協(xié)商了一個(gè)協(xié)議, 約定好消息的次序和格式, 這才算解決了問題。
(碼農(nóng)翻身注: 這其實(shí)就是基于socket的應(yīng)用層協(xié)議)
Web
我明白我和她已經(jīng)不可能在一起了, 每天的socket通信已經(jīng)讓我滿足。
可是有一天當(dāng)我照例發(fā)起socket的請(qǐng)求的時(shí)候, TCP的連接竟然告訴我 "超時(shí)" 了, 這是從來沒有發(fā)生的事情,難道這一次要徹底失去她了嗎?
我冒著風(fēng)險(xiǎn),馬上把異常報(bào)給了操作系統(tǒng)老大, 老大嘗試了一下說: “我ping了一下, 網(wǎng)絡(luò)是通的, ?估計(jì)是你那從未見面的小女朋友不想理你了, 悄悄的換了一個(gè)你不知道的端口吧。”
我斬釘截鐵的說: 那絕對(duì)不可能, 她不是這樣的人。
可是遲遲沒有消息, 我每天都會(huì)試圖連接一下, 每次都是超時(shí), 沒有她的日子生活都是灰色的, 不斷的煎熬讓我快要絕望了。
終于有一天, 有一個(gè)U盤從她的城市來到我們這里, 告訴了我們一個(gè)驚人的消息,她所在的城市安裝了防火墻,現(xiàn)在除了幾個(gè)特定的端口(例如80,443...) 之外, 都不允許訪問了。
我一下子松了口氣, ?怪不得, 她告訴我的端口不是80和443, 被封掉了, 我自然連接不上了。
我問U盤: “那我想和女朋友通信, 該怎么辦?”
U盤說: 很簡單啊, 你和你女朋友都可以包裝成Web 服務(wù)啊, 這樣都是通過Http(80端口)或者Https(443端口)來訪問的, 這樣防火墻是允許的啊。
好吧, 為了和她聯(lián)系上, 馬上拋棄socket, ?開始向Web服務(wù)進(jìn)化。
一個(gè)Web服務(wù)首先要有一個(gè)endpoint , 其實(shí)就是就是一個(gè)URL , 描述了這個(gè)Web服務(wù)的地址。
其次確定Web服務(wù)的描述方式和數(shù)據(jù)傳輸方式, 我先是選了WSDL 和 SOAP , ? 研究了一下才發(fā)現(xiàn)這哥倆太繁瑣了,都是XML, 很多冗余的數(shù)據(jù)標(biāo)簽, ?我想這將會(huì)極大的影響我和她的通信效率, 還是換成簡單的HTTP GET/POST + JSON吧, ?很簡潔,能充分的表達(dá)我的相思之情。
我把我這個(gè)Web服務(wù)的地址和格式協(xié)議告訴U盤, 懇請(qǐng)U盤帶到那個(gè)城市,再把女朋友的Web服務(wù)描述帶回來。
我欣喜的發(fā)現(xiàn),我和她不約而同的選擇了輕量級(jí)的HTTP+ JSON, 看來雖然隔著千山萬水,我們的心意還是相通的。
這樣的準(zhǔn)備工作足足干了6個(gè)CPU月, 但我并不覺得累, 因?yàn)橄M恢痹谇斑呎賳尽?/p>
這是一個(gè)晴朗的日子,一切工作準(zhǔn)備就緒,馬上就要聯(lián)系了, 這一次我的心情反而平靜了下來, 因?yàn)槲覉?jiān)信她肯定在那邊等著我。
我通過HTTP向她發(fā)出了呼叫, HTTP的報(bào)文被打包在TCP報(bào)文段中, 又被放到IP層數(shù)據(jù)報(bào)中, 最后形成鏈路層的幀, 通過網(wǎng)卡發(fā)了出去。?
在意料之中的漫長等待以后, 我看到了期待已久地回復(fù): 我們終于又“見”面了 !
我回答:“是啊, 真是太不容易了”
“不知道將來我們會(huì)不會(huì)再分開?” 她擔(dān)憂的說。
“未來會(huì)如何? 我也不知道,還是牢牢地把握住現(xiàn)在吧! 我相信我們的心會(huì)一直在一起,什么都無法阻止! ?”
(完)?
你看到的只是冰山一角, 更多精彩文章,參見《碼農(nóng)翻身2016文章精華》
有心得想和大家分享? 歡迎投稿 ! 我的聯(lián)系方式:微信:liuxinlehan ?QQ: 3340792577
轉(zhuǎn)自https://mp.weixin.qq.com/s/3FPI_mHzQ4bqtD8zIQq0tQ
總結(jié)
以上是生活随笔為你收集整理的两个程序的爱情故事(刘欣)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。