我正在尝试学习php,分叉,共享资源等。 在试图理解这些概念的同时,我遇到了一个毫无意义的问题,我修复了(运气好的)却没有得到这个想法......
这可能是一个错误..
<?php
$m = new Memcached();
$m->addServer('localhost', 11211);
$m->set('name', 'anil');
$workerCount = 3;
for($c=0; $c<$workerCount; $c++){
$pid = pcntl_fork();
if($pid === 0){
/* Children */
$m->get('name');
$name = $m->get('name');
echo 'This is child number : ' . getmypid() . PHP_EOL;
echo 'And this is name value in memcache : ' . $name . ' : ' . $m->getResultCode() . PHP_EOL . PHP_EOL;
exit;
}else{
/* Parent */
pcntl_wait($status);
}
}
正如你所注意到的那样,我打电话给$ m-&gt;得到两次......如果我不这样做就行不通。
两个调用结果:
这是儿童号码:9684而且这个 是memcache中的microtime:anil:0
这是儿童号码:9685而且这个 是memcache中的microtime:anil:0
这是儿童号码:9686而且这个 是memcache中的microtime:anil:0
一个通话结果:
这是儿童号码:9721而且这个 是memcache中的microtime:anil:0
这是儿童号码:9722而且这个 是memcache中的microtime :: 19
这是儿童号码:9723这个 是memcache中的microtime :: 19
PS: $ m-&gt; getResultCode() - &gt; 19是:Memcached :: RES_SOME_ERRORS
答案 0 :(得分:2)
你需要在fork之后创建与memcached的连接。否则你在php端的多个进程之间共享相同的套接字连接,而memcache不知道你是这样做的。