zoukankan      html  css  js  c++  java
  • PHP 多线程扩展(正儿八经的线程)pthreads安装

    环境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 //或者 --enable-maintainer-zts

    make

    make install

    结果就把线程安装版的php安装到了/usr/local/php-zts,目前我不了解开启线程安全到底会带来什么影响,所以,就弄两个测试版本。

    如果遇到undefined reference to `executor_globals_id'

    make clean就可以了

    下载和安装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-config
    make
    make install

     

     

    /usr/local/php-zts/bin/php -i|grep "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("
    ");
    }
    
    /* notify the thread so it can destroy resource */
    $thread->synchronized(function($me){
        $me->notify();
    }, $thread);
    ?>
    

    /usr/local/php-zts/bin/php Fetch.php

    结果:

    0
    1
    2
    3
    6
    7
    8
    9
    10
    4
    5
    $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

    发个全点儿的php编译参数:

    ./configure
    --prefix=/usr/local/php-zts
    --enable-sockets
    --enable-pcntl
    --enable-maintainer-zts
    --enable-sysvmsg
    --enable-mbstring
    --with-mysql=/usr
    --with-mysql-sock=/var/lib/mysql/mysql.sock  
    --with-mysqli=/usr/lib64/mysql/mysql_config
    --with-pdo-mysql=/usr/lib64/mysql/mysql_config/configure

    我的QQ群:
    PHPer&Webgame&移动开发,群号:95303036

    windows版:

    http://blog.csdn.net/aoyoo111/article/details/19020161



  • 相关阅读:
    链接、装载与库
    mysql 调用外部程序
    SAMBA 共享服务器搭建
    Django 部署
    python基础教程1
    django 文件上传
    Django URLconf
    django view
    admin site
    django book
  • 原文地址:https://www.cnblogs.com/lein317/p/5067588.html
Copyright © 2011-2022 走看看