兩個程序的愛情故事
好感
在這個忙碌的城市裡, 我雖然沒和她見過面, 但我們已經聊過很多次了。
與其說是聊天,倒不如說是通信, 每次我想給她說話時, 我就把消息放到一塊共享內存裡邊, 然後就離開運行車間, 讓她或者別人去使用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、資料庫、運維等。
![](https://pic.pimg.tw/zzuyanan/1488615166-1259157397.png)
![](https://pic.pimg.tw/zzuyanan/1482887990-2595557020.jpg)
※2017年IT界最「吃香」的技
※千萬千萬不要運行的Linux命令
※人工智慧是「消滅」還是「臣服」人類?霍金是這樣說的
※為什麼說學會學習是開發者重要且必備的技能?
TAG:程序猿 |
※小程序的兩種情緒
※編程地震!這個事情影響到@所有程序員!
※編程地震!這個事情影響到所有程序員!
※親愛的程序員,熱愛的那些知識
※母愛,一個被基因設計好的「程序」
※又是程序猿躺槍,情商的確是個硬傷
※關於小程序的那些你不知道的事
※沒有程序猿的命,卻得了程序猿的病
※程序員們的愛情求婚表白情書 屬於直男們的浪漫
※心疼!男朋友是程序員,你可以為他做這些事情!
※做一個歡樂的程序猿!
※那些被拍成電影的偉大程序猿的故事
※程序員們,是時候面向故事編程了!
※程序員最喜歡什麼樣的項目經理?
※幾張圖來表達程序猿的愛情
※一個關於程序的「吐槽」
※兩個關於世界盃的小程序
※程序猿遇到喜歡的女愛該如何示愛?這個程序小哥的操作簡直逆天!
※程序員都經歷過的那些事
※程序員背後不為人知的故事……