>  기사  >  PHP 프레임워크  >  Swoole은 멀티스레드인가요?

Swoole은 멀티스레드인가요?

WBOY
WBOY원래의
2022-03-14 16:24:043833검색

swoole은 멀티 스레드가 아닙니다. PHP 언어는 다중 프로세스를 지원하지 않기 때문에 swoole은 다중 프로세스 모드를 사용합니다. 다중 프로세스 모드에서는 작업 프로세스에서 전역 변수와 슈퍼 전역 변수가 수정되면 다른 프로세스에서는 유효하지 않습니다. 프로세스.

Swoole은 멀티스레드인가요?

이 튜토리얼의 운영 환경: Windows 10 시스템, Swoole 4 버전, DELL G3 컴퓨터

Swoole은 멀티 스레드인가요?

PHP 언어는 멀티 스레딩을 지원하지 않기 때문에 Swoole은 멀티 프로세스를 사용합니다. 방법. 다중 프로세스 모드에는 프로세스 메모리 격리가 있습니다. 작업 프로세스에서 전역 변수와 슈퍼 전역 변수가 수정되면 다른 프로세스에서는 유효하지 않습니다.

Swoole의 멀티스레딩은 실제로 다중 프로세스입니다. 너무 많은 프로세스를 생성하면 전환 비용이 매우 많이 듭니다. pthread를 사용할 수 있다면 pthread를 사용하는 것이 좋습니다.

swoole 예시는 다음과 같습니다:

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

추천 학습: swoole 튜토리얼

위 내용은 Swoole은 멀티스레드인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.