2011-06-22 36 views
1

我想了解有關php,分叉,共享資源等 雖然試圖理解這些概念,我得到了一個毫無意義的問題,我修正了(運氣好)但沒有得到想法..php分叉和使用memcache

它可能是一個錯誤..

<?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->獲得兩倍..如果我不這是行不通的。

兩個呼號結果:

這是孩子數:9684這 在內存緩存microtime中:阿尼爾:0

這是孩子數:9685這 在內存緩存microtime中:anil:0

這是子編號:9686而這個 是在memcache中的microtime:anil:0

一個調用的結果:

這是孩子數:9721這 在內存緩存microtime中:阿尼爾:0

這是孩子數:9722這 是,在microtime memcache :: 19

這是子數:9723而這個 是memcache中的microtime :: 19

PS: $ M-> getResultCode() - > 19:Memcached的:: RES_SOME_ERRORS

回答

2

您需要創建您的連接叉後memcached的。否則你在PHP端的多個進程之間共享相同的套接字連接,並且memcache不知道你正在做這件事。

+0

它可能是正確的。但是這個問題與它無關。正如我注意到它在第一個輸出中以某種方式工作。在第二個輸出中,您可以看到第一個孩子可以從memcache中獲得。 – anilyeni