這里概念有些模糊,希望高手稍作解釋,感激不盡!
我在start_businessworker.php中做一個(gè)持久化的變量user_list = []
與在GlobalData中add(user_list,array())有何區(qū)別?
我的需求是在linux下,4個(gè)業(yè)務(wù)worker可以同時(shí)維護(hù)一個(gè)用戶列表
謝謝!
在linux下,start_businessworker.php啟動(dòng)后啟動(dòng)的是4個(gè)進(jìn)程對(duì)嗎?
那么在start_businessworker.php下做的一個(gè)持久化的變量,對(duì)4個(gè)進(jìn)程而言是4個(gè)變量還是1個(gè)?
對(duì)于 PHP 這種語言來說,能夠【在內(nèi)存中持久保存】的變量只有兩種,全局變量和局部靜態(tài)變量。
無論哪種,當(dāng)一個(gè)進(jìn)程分裂成多個(gè)進(jìn)程(發(fā)生在 Worker::runAll() 的時(shí)候)后,它們都各自獨(dú)立存在于自己進(jìn)程的內(nèi)存空間,互相是無關(guān)的。如果變量的值產(chǎn)生于進(jìn)程分裂之前,它們的值也只是碰巧相同而已。不過一種特別的情況是,如果變量是資源類型,比如數(shù)據(jù)庫連接,則它們代表的是同一個(gè)物理資源,此時(shí)使用這個(gè)資源的時(shí)候要小心資源沖突的問題。
GlobalData 是以進(jìn)程間通信的方式實(shí)現(xiàn)數(shù)據(jù)共享。
回到你的應(yīng)用場景,你應(yīng)該使用 GlobalData 或者類似的數(shù)據(jù)共享方案,才能實(shí)現(xiàn)【4個(gè)業(yè)務(wù)worker可以同時(shí)維護(hù)一個(gè)用戶列表】。