當前位置:
首頁 > 知識 > 兩個程序的愛情故事

兩個程序的愛情故事

兩個程序的愛情故事



好感


在這個忙碌的城市裡, 我雖然沒和她見過面, 但我們已經聊過很多次了。


與其說是聊天,倒不如說是通信, 每次我想給她說話時, 我就把消息放到一塊共享內存裡邊, 然後就離開運行車間, 讓她或者別人去使用CPU。 等我再次進來的時候,她回復的消息就已經在那個共享內存中了。

有無數次,我離開的時候都想偷偷的看一眼, 希望接下來運行的是她,可是這個城市嚴格的規則讓我的希望只是奢望。


操作系統把我們這些進程嚴格的隔離, 他通過虛擬內存的機制,讓每個進程都有一塊虛擬的、獨立的地址空間, 從而成功的製造了一個假象 : 讓大家以為內存中只有一個程序在運行。


當我在就緒隊列中等待的時候,也被嚴格禁止和別人交談, 我經常環顧四周,希望能夠看到她的身影, 可是這個系統的進程成千上萬, 究竟哪個是她?


也許我見過她,但是根本認不出來。


我和她越聊越多, 對她的好感就越深, 有一次我給她發的消息等了100毫秒都沒有回復,把我都快急瘋了。


她很喜歡聽我講故事,尤其是那個編號為0x3704 的線程,每次她都會說: 唉,那些線程可真可憐。 我就嚇唬她說: 有一天我們的機器也會重啟的, 到時候估計你也認不出我來了。 她說沒事的, 只要我能通過共享內存給你發消息,我就知道你就在這個城市裡。


(註: 0x3704的故事在《我是一個線程》里,返回上一級,回復:0009獲取文章)


分離


這樣的日子過了一天又一天, 我想見到她的願望越來越迫切了。


我悄悄給了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層數據報中, 最後形成鏈路層的幀, 通過網卡發了出去。


在意料之中的漫長等待以後, 我看到了期待已久地回復: 我們終於又「見」面了 !


我回答:「是啊, 真是太不容易了」


「不知道將來我們會不會再分開?」 她擔憂的說。


「未來會如何? 我也不知道,還是牢牢地把握住現在吧! 我相信我們的心會一直在一起,什麼都無法阻止! 」


本文編號2346,以後想閱讀這篇文章直接輸入2346即可。


輸入m可以獲取到文章目錄

推薦


Linux學習


更多推薦15個技術類公眾微信


涵蓋:程序人生、演算法與數據結構、黑客技術與網路安全、大數據技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序猿 的精彩文章:

2017年IT界最「吃香」的技
千萬千萬不要運行的Linux命令
人工智慧是「消滅」還是「臣服」人類?霍金是這樣說的
為什麼說學會學習是開發者重要且必備的技能?

TAG:程序猿 |

您可能感興趣

小程序的兩種情緒
編程地震!這個事情影響到@所有程序員!
編程地震!這個事情影響到所有程序員!
親愛的程序員,熱愛的那些知識
母愛,一個被基因設計好的「程序」
又是程序猿躺槍,情商的確是個硬傷
關於小程序的那些你不知道的事
沒有程序猿的命,卻得了程序猿的病
程序員們的愛情求婚表白情書 屬於直男們的浪漫
心疼!男朋友是程序員,你可以為他做這些事情!
做一個歡樂的程序猿!
那些被拍成電影的偉大程序猿的故事
程序員們,是時候面向故事編程了!
程序員最喜歡什麼樣的項目經理?
幾張圖來表達程序猿的愛情
一個關於程序的「吐槽」
兩個關於世界盃的小程序
程序猿遇到喜歡的女愛該如何示愛?這個程序小哥的操作簡直逆天!
程序員都經歷過的那些事
程序員背後不為人知的故事……