PHP 多線程擴充(正兒八經的線程)pthreads安裝

來源:互聯網
上載者:User
環境CentOS 6.3 64bit,php 5.4.5 pthreads需要安全執行緒環境, 下載php的安裝包,解壓:   tar zxvf php-5.4.5.tar.gz//名字是不是這個我不確定,自己去下載 安裝: ./configure --enable-zts --prefix=/usr/local/php-zts make make install 結果就把線程安裝版的php安裝到了/usr/local/php-zts,目前我不瞭解開啟安全執行緒到底會帶來什麼影響,所以,就弄兩個測試版本。 下載和安裝pthreads: tar zxvf pthreads cd pthreads-0.0.45 // 本文的是第一個stable版本 /usr/local/php-zts/bin/phpize./configure --with-php-config=/usr/local/php-zts/bin/php-configmakemake install   /usr/local/php-zts/bin/php -igrep "php.ini"找出php.ini的位置,修改它把ext=pthreads.so加入進入進去,因為我原來就有php,現在新裝的php.ini檔案不存在我就考了一個過去…… pthreads-0.0.45/examples目錄下有些樣本檔案,比文檔有用,線上文檔根本不能說明問題,我修改了一個,執行了一下:
 <?php  /* * Sharing symbols 101 * @NOTE Thread::fetch was never included in a release and was superceeded by object handlers *   pthreads allows read access to thread data from any context     pthreads allows write access to thread data from any context     carry on reading ...     work in progress ... */  class TestObject {      public $val;  }    class Fetching extends Thread {      public function run(){          /*         * of course ...         */          $this->sym = 10245;          $this->arr = array(              "1", "2", "3"          );          echo '6'.chr(10);          /*         * objects do work, no preparation needed ...         * read/write objects isn't finalized ..         * so do the dance to make it work ...         */          $obj = new TestObject();          $obj->val = "testval";          $this->obj = $obj;          echo '7'.chr(10);          /*         * will always work         */          $this->objs = serialize($this->obj);          echo '8'.chr(10);          /*         * nooooooo         */          $this->res = fopen("php://stdout", "w");          echo '9'.chr(10);          /*         * tell the waiting process we have created symbols and fetch will succeed         */          $this->synchronized(function(){              $this->notify();          });          echo '10'.chr(10);          /* wait for the process to be finished with the stream */          $this->synchronized(function(){              $this->wait();          });          echo '11'.chr(10);      }  }  echo '0'.chr(10);  $thread = new Fetching();  echo '1'.chr(10);  $thread->start();  //sleep(1); 加了這個就不能正常工作,真奇怪  echo '2'.chr(10);  $thread->synchronized(function($me){      echo '3'.chr(10);      $me->wait();      echo '4'.chr(10);  }, $thread);  echo '5'.chr(10);    /* * we just got notified that there are symbols waiting */  foreach(array("sym", "arr", "obj", "objs", "res") as $symbol){      printf("\$thread->%s: ", $symbol);         $fetched = $thread->$symbol;      if ($fetched) {          switch($symbol){              /*             * manual unserialize             */              case "objs":                  var_dump(unserialize($fetched));              break;                            default: var_dump($fetched);          }      }      printf("\n");  }    /* notify the thread so it can destroy resource */  $thread->synchronized(function($me){      $me->notify();  }, $thread);  ?>  /usr/local/php-zts/bin/php Fetch.php結果:012367891045$thread->sym: int(10245) $thread->arr: array(3) {  [0]=>  string(1) "1"  [1]=>  string(1) "2"  [2]=>  string(1) "3"} $thread->obj: object(TestObject)#2 (1) {  ["val"]=>  string(7) "testval"} $thread->objs: object(TestObject)#2 (1) {  ["val"]=>  string(7) "testval"} $thread->res: resource(3) of type (stream) 11 
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.