<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • php多線程怎么實現(一覽php多線程實現方法)


    1、curl_multi方法

    當需要多線程的時候,可以用curl_multi一次性請求多個操作來完成,但curl走的是網絡通信,效率與可靠性就比較差了的。

    function main(){ 
     
     $sql = "select waybill_id,order_id from waybill where status>40 order by update_time desc limit 10 "; 
     
     $data = Yii::app()->db->createCommand($sql)->queryAll(); //yii 框架格式 
     
     foreach ($data as $k => $v) { 
     
     if ($k % 2 == 0) { //偶數發一個網址 
     
     $send_data[$k]['url'] = ''; 
     
     $send_data[$k]['body'] = $v['waybill_id']; 
     
     } else { //奇數發送另外一個網址 
     $send_data[$k]['url'] = 'http://www.abc.com'; 
     
     $send_data[$k]['body']=array($v['order_id'] => array('extra' => 16)); 
     } 
     } 
     }
    

    2、通過stream_socket_client 方式

    function sendStream() { 
     $english_format_number = number_format($number, 4, '.', ''); 
     
     echo $english_format_number; 
     exit(); 
     $timeout = 10; 
     $result = array(); 
     $sockets = array(); 
     $convenient_read_block = 8192; 
     $host = "test.local.com"; 
     $sql = "select waybill_id,order_id from xm_waybill where status>40 order by update_time desc limit 1 "; 
     $data = Yii::app()->db->createCommand($sql)->queryAll(); 
     $id = 0; 
     
     foreach ($data as $k => $v) { 
     if ($k % 2 == 0) { 
     $send_data[$k]['body'] = NoticeOrder::getSendData($v['waybill_id']); 
     
     } else { 
     $send_data[$k]['body'] = array($v['order_id'] => array('extra' => 16)); 
     } 
     $data = json_encode($send_data[$k]['body']); 
     $s = stream_socket_client($host . ":80", $errno, $errstr, $timeout, STREAM_CLIENT_ASYNC_CONNECT | STREAM_CLIENT_CONNECT); 
     if ($s) { 
     $sockets[$id++] = $s; 
     $http_message = "GET /php/test.php?data=" . $data . " HTTP/1.0\r\nHost:" . $host . "\r\n\r\n"; 
     fwrite($s, $http_message); 
     } else { 
     echo "Stream " . $id . " failed to open correctly."; 
     } 
     } 
     }
    

    3、通過多進程代替多線程

    function daemon($func_name,$args,$number){

    while(true){

    $pid=pcntl_fork();

    if($pid==-1){

    echo “fork process fail”;

    exit();

    }elseif($pid){//創建的子進程

    static $num=0;

    $num++;

    if($num>=$number){

    //當進程數量達到一定數量時候,就對子進程進行回收。

    pcntl_wait($status);

    $num–;

    }

    }else{ //為0 則代表是子進程創建的,則直接進入工作狀態

    if(function_exists($func_name)){

    while (true) {

    $ppid=posix_getpid();

    var_dump($ppid);

    call_user_func_array($func_name,$args);

    sleep(2);

    }

    }else{

    echo “function is not exists”;

    }

    exit();

    }

    }

    }

    function worker($args){

    //do something

    }

    daemon(‘worker’,array(1),2);

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费