在論壇里看到很多關(guān)于多個worker之間如何實(shí)現(xiàn)讀取同一個數(shù)據(jù)的問題。如下:
其實(shí)這個問題說簡單也簡單,但多少還是要切換一下思維或應(yīng)該去了解一下基礎(chǔ)知識。
在操作系統(tǒng)中,進(jìn)程在資源處理層是獨(dú)立存在的,即多進(jìn)程之間永遠(yuǎn)是相互獨(dú)立的!它們天然是不可能共用一個所謂的變量的。不論是所屬主進(jìn)程還是衍生子進(jìn)程都是這樣。所以不要妄想使用引用的方式將變量地址傳遞給其它進(jìn)程?。?!
因此,這種隔離性有好也有壞,隔離就相互不干擾避免數(shù)據(jù)污染,太隔離了又會導(dǎo)致數(shù)據(jù)不互通不方便,具體就要看場景了。
大家應(yīng)該經(jīng)常遇到這個東西:IPC。
即進(jìn)程間通信(IPC - Interprocess communication),就是在不同進(jìn)程之間傳播或交換信息。
這就是說,進(jìn)程間共享信息是一門單獨(dú)的學(xué)問,沒那么簡單的。
拿linux來說,IPC相關(guān)的內(nèi)容就是解決進(jìn)程間數(shù)據(jù)共享的,它們之間的共享方式,重點(diǎn)就兩個字:通信。
是的,是通信,有通信就必然是有網(wǎng)絡(luò)的有協(xié)議的,所以說,這也并非是一個好處理的東西。
然后推薦看看GlobalData數(shù)據(jù)共享組件的兩個文件:Server和Client,簡單的過一下就理解了。
本來就是服務(wù)端監(jiān)聽一個本地端口,然后在任意進(jìn)程中的客戶端連接這個端口訪問數(shù)據(jù),基于這種通信的邏輯實(shí)現(xiàn)數(shù)據(jù)共享。
希望我的理解能快速打通您對多進(jìn)程編程的認(rèn)知。
看看這個例子就明白了: