• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

shmop的有关问题

php 搞代码 4年前 (2022-01-25) 17次浏览 已收录 0个评论

shmop的问题
是这样的,我在程序中需要频繁处理一段数据,不想每次都向MySQL查询,于是把这些要用的记录取了出来,用shmop放在内存里,方便以后修改。

不过,在写的过程中,我突然想到一个并发控制上的问题,不知道该怎么解决:

function function1(){
读取内存数据
长时间操作(修改了第x1行)
写入内存数据
}

function function2(){
读取内存数据
长时间操作(修改了第x2行)
写入内存数据
}

问题就来了,如果我把function1和function2两函数,从头到尾的用信号量同步,如:
function function1(){
获取信号量
读取内存数据
长时间操作(修改了第x1行)
写入内存数据
释放信号量
}

function function2(){
获取信号量
读取内存数据
长时间操作(修改了第x2行)
写入内存数据
释放信号量
}

那么问题可以解决,但是有违我的初衷,我的初衷是想用缓存加速,但是这样做,长时间操作不能并发执行,这样必然更慢了

如果只在写入或读取的时候同步,如:
function function1(){
获取信号量
读取内存数据
释放信号量

长时间操作(修改了第x1行)

获取信号量
写入内存数据
释放信号量
}

function function2(){
获取信号量
读取内存数据
释放信号量

长时间操作(修改了第x2行)

获取信号量
写入内存数据
释放信号量
}

那么function1如果刚好读完数据,function2写入数据了,function1写入数据时就会擦掉function2写入的数据,function2就白忙活了。。。

很怀恋java Servlet,java Servlet是可以把整个对象保存在内存里,只要能获得对象的引用,修改可以只修改对应行。而php需要把对象序列化以后才能存入内存,要动是整个对象一起动,很麻烦啊。。。

不知道怎么解决,大家讨论讨论?

——解决方案——————–
去年年底用了一次,导致内存频频出问题,PHP进程死掉,网上一查竟然是WIN XP不支持如销毁等操作。不知道WIN 2003下会不会出现同样的问题。
—–*本文来@源gao@daima#com搞(%代@#码@网2

搞代gaodaima码

-解决方案——————–
反正我操作的时候发现在XP下无法覆盖,销毁内存,只能另外开一个ID重新存储。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:shmop的有关问题

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址