靜態變量與多進程


全局變量是靜態變量,在整個程序的生命周期都存在,那么多進程能否通過全局變量(即靜態變量)進行通信?

答案是不可以

首先我們先回顧子進程的誕生和其運行原理。

父進程通過fork來復制出一個子進程的副本,根據原理,子進程擁有父進程的一份完整數據拷貝。

同時由於fork時按頁復制數據太耗時,於是子進程在剛被fork出來的時候,讀取的其實是父進程中的內存數據(所以,這時候也可以說靜態變量是共享的)

但是, 當父子進程中的一方對靜態變量(其實不只是靜態變量,任何內存中的東西都是這樣)進行寫入操作時,就會觸發寫時復制機制,這個變量將在子進程中產生一個新的空間來存放,於是變量不再共享。

所以,父進程和子進程中的變量是不可以被共享的,在程序員和進程的角度來看,每個進程的內存空間都是屬於它自己的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM