從我懂事以來,就一直被所謂的 IPC 有著崇敬的心,只要有程式裡面,有碰到 IPC 字眼的,就是聖經。
那一段程式,就是神聖不可侵犯的。(也就是,你不要去改他,改了就會倒大楣。)
凡夫俗子的我,自然不會妄想去了解這種充滿神聖之光的程式。
IPC 是什麼,就是兩個 process 互相交換資料,以達到溝通的功效。是 Inter-Process Communication 的縮寫。
你可以用這樣想像,一個 process 的程式,就是一個腦袋,有兩隻這樣的程式,就是兩個腦袋。
如果人只有腦袋,,兩個腦袋要怎麼講話?好歹要配一個嘴巴跟耳朵吧。
因此,一隻獨力工作的程式,比可以跟別人溝通的程式簡單,因為它少了嘴巴跟耳朵。
有的程式,只有嘴巴,沒有耳朵,我叫他是老闆。有的程式,只有耳朵,沒有嘴巴,我叫他是工程師。
有的程式,只有嘴巴,沒有耳朵也沒有腦袋,我叫他是政治人物。
有了嘴巴跟耳朵的程式,還是不能溝通。
為什麼?
一個只會說國語,一個只會說台語,這要怎麼溝通?
所以,還要幫這兩隻程式協調一下,請他們講台灣國語。這就是所謂的 protocol。
除了這個,還有一個要準備的,就是,溝通的管道。
如果一個在台北,一個在高雄,你就請他們打電話。
如果兩個在同一間房間,那就直接講就好了。
如果要畫圖給人家看,那可能就用 MSN。這就是所謂的 media。

http://en.wikipedia.org/wiki/Inter-process_communication 有定義、有實作的方向,還有目前已實作出來的程式。
有些名字我們非常熟悉,例如:named pipes, Sockets, CORBA, Message Bus(RFC 3259), XML-RPC, SOAP, COM, DCOM, DDE。
這些都是實作出的程式。而有趣的是,IPC 用的方法,其實說穿就不高明了。這就是告訴我,只要有心,就可以進入那神聖的領域。
然後把門關起來,讓崇敬 IPC 的人們,繼續崇拜 IPC 吧。重點就是「心」,就是俗話說得好:「戲法人人會變,各有巧妙不同」。
以檔案系統來說,他也是 IPC 可以利用的方法之一。而這種方法,相信大家都用過,只是不知道這就是 IPC 罷了。

把檔案當 media 的 IPC,比較慢,因為還要寫檔案到硬碟去。用 memory 當 media 的方法交換資料就比較快,只是比較麻煩。
麻煩的原因是,因為 memory 是 OS 在管的,而且管的比檔案還嚴格,因此,直接想使用 memory 當 media,就是會多一些動作。
在 windows 底下,有個 mapping memory 的方法,可以讀寫 memory,而這些動作,居然跟寫檔案很像,
(我沒有說其他的OS就會很複雜,因為我還沒有去試其他OS)
所以如果你有一個 file-base的 IPC,就可能可以把它重寫成 memory-base 的 IPC,速度會變快,loading 應該也會降低。
我想,下一次來實作看看,mapping memory,要怎麼來做資料的溝通吧。
有了 mapping memory 的經驗,我再來看其他 anonymous pipes, named pipes, sockets 等比較高階的方法。



reference
[1] http://en.wikipedia.org/wiki/Inter-process_communication
[2] http://en.wikipedia.org/wiki/Shared_memory
[3] http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/sharing_files_and_memory.asp

本文授權為CC
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 betaparticle 的頭像
    betaparticle

    betaparticle的部落格

    betaparticle 發表在 痞客邦 留言(0) 人氣()