这里概念有些模糊,希望高手稍作解释,感激不尽!
我在start_businessworker.php中做一个持久化的变量user_list = [] 与在GlobalData中add(user_list,array())有何区别?
我的需求是在linux下,4个业务worker可以同时维护一个用户列表
谢谢!
GlobalData可以多进程共用
在linux下,start_businessworker.php启动后启动的是4个进程对吗? 那么在start_businessworker.php下做的一个持久化的变量,对4个进程而言是4个变量还是1个?
什么是【持久化的变量】?没这个概念啊……
如果你说的是【全局变量】的意思,那么,对于每个进程而言,它们都是在用自己内存空间的那个全局变量,互相是无关的。
持久化的变量这个词出自官方的文档。意思是每个进程中的变量是持久存在于内存中的,MYSQL的组件里的$db就是这个意思
@3676:给个链接呗,我去学习一下 :)
对于 PHP 这种语言来说,能够【在内存中持久保存】的变量只有两种,全局变量和局部静态变量。
无论哪种,当一个进程分裂成多个进程(发生在 Worker::runAll() 的时候)后,它们都各自独立存在于自己进程的内存空间,互相是无关的。如果变量的值产生于进程分裂之前,它们的值也只是碰巧相同而已。不过一种特别的情况是,如果变量是资源类型,比如数据库连接,则它们代表的是同一个物理资源,此时使用这个资源的时候要小心资源冲突的问题。
GlobalData 是以进程间通信的方式实现数据共享。
回到你的应用场景,你应该使用 GlobalData 或者类似的数据共享方案,才能实现【4个业务worker可以同时维护一个用户列表】。
GlobalData可以多进程共用
在linux下,start_businessworker.php启动后启动的是4个进程对吗?
那么在start_businessworker.php下做的一个持久化的变量,对4个进程而言是4个变量还是1个?
什么是【持久化的变量】?没这个概念啊……
如果你说的是【全局变量】的意思,那么,对于每个进程而言,它们都是在用自己内存空间的那个全局变量,互相是无关的。
持久化的变量这个词出自官方的文档。意思是每个进程中的变量是持久存在于内存中的,MYSQL的组件里的$db就是这个意思
@3676:给个链接呗,我去学习一下 :)
对于 PHP 这种语言来说,能够【在内存中持久保存】的变量只有两种,全局变量和局部静态变量。
无论哪种,当一个进程分裂成多个进程(发生在 Worker::runAll() 的时候)后,它们都各自独立存在于自己进程的内存空间,互相是无关的。如果变量的值产生于进程分裂之前,它们的值也只是碰巧相同而已。不过一种特别的情况是,如果变量是资源类型,比如数据库连接,则它们代表的是同一个物理资源,此时使用这个资源的时候要小心资源冲突的问题。
GlobalData 是以进程间通信的方式实现数据共享。
回到你的应用场景,你应该使用 GlobalData 或者类似的数据共享方案,才能实现【4个业务worker可以同时维护一个用户列表】。