Rumah > rangka kerja php > Swoole > Adakah swool berbilang benang?

Adakah swool berbilang benang?

WBOY
Lepaskan: 2022-03-14 16:24:04
asal
3892 orang telah melayarinya

swole bukan berbilang benang. Oleh kerana bahasa PHP tidak menyokong berbilang proses, swoole menggunakan mod berbilang proses Dalam mod berbilang proses, terdapat pengasingan kandungan proses Apabila pembolehubah global dan pembolehubah super-global diubah suai dalam proses kerja, ia tidak sah dalam yang lain proses.

Adakah swool berbilang benang?

Persekitaran pengendalian tutorial ini: sistem Windows 10, versi Swoole 4, komputer DELL G3

Adakah swoole berbilang benang? >

Oleh kerana bahasa PHP tidak menyokong multi-threading, jadi Swoole menggunakan mod berbilang proses. Terdapat pengasingan memori proses dalam mod berbilang proses Apabila pembolehubah global dan pembolehubah super-global diubah suai dalam proses kerja, ia akan menjadi tidak sah dalam proses lain.

Pembenaran berbilang Swoole sebenarnya adalah berbilang proses Mencipta terlalu banyak proses dan menukar adalah sangat mahal Jika anda boleh menggunakan pthread, adalah disyorkan untuk menggunakan pthread.

contoh swole adalah seperti berikut:

<?php
/**
 * 创建多进程
 */
$worker_num         = 6;        // 默认进程数
$workers             = [];        // 进程保存
$redirect_stdout    = false;    // 重定向输出  ; 这个参数用途等会我们看效果
for($i = 0; $i < $worker_num; $i++){
    $process = new swoole_process(&#39;callback_function&#39;, $redirect_stdout);
 
    // 启用消息队列 int $msgkey = 0, int $mode = 2
    $process->useQueue(0, 2);
    $pid = $process->start();
 
    // 管道写入内容
    $process->write(&#39;index:&#39;.$i);
 
    $process->push(&#39;进程的消息队列内容&#39;);
    // 将每一个进程的句柄存起来
    $workers[$pid] = $process;
}
 
 
/**
 * 子进程回调
 * @param  swoole_process $worker [description]
 * @return [type]                 [description]
 */
function callback_function(swoole_process $worker)
{
    $recv = $worker->pop();
    echo "子输出主内容: {$recv}".PHP_EOL;
    //get guandao content
    $recv = $worker->read();
    $result = doTask();
    
    echo PHP_EOL.$result.&#39;===&#39;.$worker->pid.&#39;===&#39;.$recv;
 
    $worker->exit(0);
}
 
 
/**
 * 监控/回收子进程
 */
while(1){
    $ret = swoole_process::wait();
    if ($ret){// $ret 是个数组 code是进程退出状态码,
        $pid = $ret[&#39;pid&#39;];
        echo PHP_EOL."Worker Exit, PID=" . $pid . PHP_EOL;
    }else{
        break;
    }
}
 
 
/**
 * doTask
 * @return [type] [description]
 */
function doTask()
{
    sleep(2);
    return true;
}
Salin selepas log masuk
Pembelajaran yang disyorkan:

tutorial swole

Atas ialah kandungan terperinci Adakah swool berbilang benang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan