Home >PHP Framework >Swoole >Is swoole multi-threaded?

Is swoole multi-threaded?

WBOY
WBOYOriginal
2022-03-14 16:24:043902browse

swoole is not multi-threaded. Because the PHP language does not support multi-process, swoole uses multi-process mode. In multi-process mode, there is process content isolation. When global variables and super-global variables are modified in the working process, they are invalid in other processes.

Is swoole multi-threaded?

The operating environment of this tutorial: Windows 10 system, Swoole 4 version, DELL G3 computer

Is swoole multi-threaded?

Because The PHP language does not support multi-threading, so Swoole uses multi-process mode. There is process memory isolation in multi-process mode. When global variables and super-global variables are modified in the working process, it will be invalid in other processes.

Swoole's multi-threading is actually multiple processes. Creating too many processes and switching is very expensive. If pthreads can be used, it is recommended to use pthreads.

swoole examples are as follows:

<?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;
}

Recommended learning: swoole tutorial

The above is the detailed content of Is swoole multi-threaded?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn