两个程序的爱情故事(刘欣)
好感
在這個忙碌的城市里, 我雖然沒和她見過面, 但我們已經聊過很多次了。
與其說是聊天,倒不如說是通信, 每次我想給她說話時, 我就把消息放到一塊共享內存里邊, 然后就離開運行車間, 讓她或者別人去使用CPU。 等我再次進來的時候,她回復的消息就已經在那個共享內存中了。
有無數次,我離開的時候都想偷偷的看一眼, 希望接下來運行的是她,可是這個城市嚴格的規則讓我的希望只是奢望。
操作系統把我們這些進程嚴格的隔離, ?他通過虛擬內存的機制,讓每個進程都有一塊虛擬的、獨立的地址空間, 從而成功的制造了一個假象 : ?讓大家以為內存中只有一個程序在運行。
當我在就緒隊列中等待的時候,也被嚴格禁止和別人交談, 我經常環顧四周,希望能夠看到她的身影, 可是這個系統的進程成千上萬, 究竟哪個是她??
也許我見過她,但是根本認不出來。
我和她越聊越多, 對她的好感就越深, ?有一次我給她發的消息等了100毫秒都沒有回復,把我都快急瘋了。
她很喜歡聽我講故事,尤其是那個編號為0x3704 的線程,每次她都會說: 唉,那些線程可真可憐。 ? 我就嚇唬她說: 有一天我們的機器也會重啟的, 到時候估計你也認不出我來了。 ?她說沒事的, 只要我能通過共享內存給你發消息,我就知道你就在這個城市里。
(碼農翻身注: 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層數據報中, 最后形成鏈路層的幀, 通過網卡發了出去。?
在意料之中的漫長等待以后, 我看到了期待已久地回復: 我們終于又“見”面了 !
我回答:“是啊, 真是太不容易了”
“不知道將來我們會不會再分開?” 她擔憂的說。
“未來會如何? 我也不知道,還是牢牢地把握住現在吧! 我相信我們的心會一直在一起,什么都無法阻止! ?”
(完)?
你看到的只是冰山一角, 更多精彩文章,參見《碼農翻身2016文章精華》
有心得想和大家分享? 歡迎投稿 ! 我的聯系方式:微信:liuxinlehan ?QQ: 3340792577
轉自https://mp.weixin.qq.com/s/3FPI_mHzQ4bqtD8zIQq0tQ
總結
以上是生活随笔為你收集整理的两个程序的爱情故事(刘欣)的全部內容,希望文章能夠幫你解決所遇到的問題。