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

0

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


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


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


谢谢!

已邀请:

maq

赞同来自: haoyilinde

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


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


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


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

lalala

赞同来自:

GlobalData可以多进程共用

allbluz - 后端程序员

赞同来自:

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

maq

赞同来自:

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


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

要回复问题请先登录注册