内存持久化和GlobalData的选择问题

allbluz

这里概念有些模糊,希望高手稍作解释,感激不尽!

我在start_businessworker.php中做一个持久化的变量user_list = []
与在GlobalData中add(user_list,array())有何区别?

我的需求是在linux下,4个业务worker可以同时维护一个用户列表

谢谢!

4650 4 0
4个回答

lalala

GlobalData可以多进程共用

  • 暂无评论
allbluz

在linux下,start_businessworker.php启动后启动的是4个进程对吗?
那么在start_businessworker.php下做的一个持久化的变量,对4个进程而言是4个变量还是1个?

  • 暂无评论
maq

什么是【持久化的变量】?没这个概念啊……

如果你说的是【全局变量】的意思,那么,对于每个进程而言,它们都是在用自己内存空间的那个全局变量,互相是无关的。

  • allbluz 2018-03-30

    持久化的变量这个词出自官方的文档。意思是每个进程中的变量是持久存在于内存中的,MYSQL的组件里的$db就是这个意思

  • maq 2018-03-30

    @3676:给个链接呗,我去学习一下 :)

maq

对于 PHP 这种语言来说,能够【在内存中持久保存】的变量只有两种,全局变量和局部静态变量。

无论哪种,当一个进程分裂成多个进程(发生在 Worker::runAll() 的时候)后,它们都各自独立存在于自己进程的内存空间,互相是无关的。如果变量的值产生于进程分裂之前,它们的值也只是碰巧相同而已。不过一种特别的情况是,如果变量是资源类型,比如数据库连接,则它们代表的是同一个物理资源,此时使用这个资源的时候要小心资源冲突的问题。

GlobalData 是以进程间通信的方式实现数据共享。

回到你的应用场景,你应该使用 GlobalData 或者类似的数据共享方案,才能实现【4个业务worker可以同时维护一个用户列表】。

  • 暂无评论
年代过于久远,无法发表回答
×
🔝