Swoole: o PHP concorrente

"Para sempre é muito tempo. O tempo não pára!"
– Mario Quintana



JavaScript를 사용하지 않는 프로그램(Node.js)은 PHP에서 로고를 생성하고 자연화를 인정하기 위해 JavaScript를 사용하지 않고 자연화할 수 있는 로고를 제공합니다.

이 프로그램은 php-curl을 실행하는 기본 기능을 시작하기 위한 PHP의 초기 단계에서 절차적 절차를 수행하기 위한 것입니다. PHP foi pensado como uma linguagem procedural e posteriormente foi implementa uma solução de orientação a objetos à linguagem. No mundo real, nem semper podemos esperar que uma operação seja realizada para partir para a próxima, muitas vezes necessitamos que as coisas ocorram ao mesmo tempo, que pelo menos pareça que ocorram dessa forma.

문제를 해결할 수 있는 기술이 존재하고, 문제를 해결할 수 있는 방법이 없으며, PHP에서 pthread를 사용할 수 없습니다. As corrotinas são parecidas com as Threads e seu comportamento, porém consomem menos recursos.

OpenSwoole에서 문제를 해결하기 위한 솔루션, 메모를 작성하는 문서, ele foi pensando para
고급 서비스, 에스컬레이트, TCP, UDP, Unix Socket, HTTP, WebSocket은 PHP를 사용하여 Corrotinas로 구성됩니다.

Instalação do Swoole 설치



A Primeira coisa a ser feita é instalar a extensão do Swoole na nossa máquina. PECL을 사용하는 것이 좋습니다. 미국 친구를 사귀고 컴퓨터를 설치하십시오. Vamos는 GNU/Linux 우분투 참조 배포판을 사용합니다.

PECL 설치 시 다음과 같은 권한 부여:
$ sudo apt-get install php-pear php-dev

Swoole 또는 Swoole 설치:
$ sudo sudo pecl install openswoole-4.9.1
Para finalizar iremos habilitar a extensão do Swoole adicionando essa linha ao nosso php.ini
extension=openswoole.so

마오 나 마사



Após instalar e habilitar o swoole uma série de classes e helpers ficam disponíveis para que possamos utiliza-lo em nossas aplicações. Nesse exemplo usaremos o go();
função go() nos permite encapsular uma função dentro de uma corrotina.

Teremos funções encapsuladas por duas corrotinas, uma lista uma série de herois de animes, e a outra lista os vilões. TNosso objetivo é que essa listagem ocorra "paralelamente".

Esse example nos permitirá um vislumbre do funcionamento do Swoole.

오 코딩:


<?php

// Lista os heróis
go(static function () {

    $heros = ['Kurosaki Ichigo', 'Uzumaki Naruto', 'Kamado Tanjiro'];

    foreach ($heros as $hero) {
        echo 'Hero: ' . $hero . PHP_EOL;
    }
});

// Lista os vilões
go(static function () {

    $villains = ['Sosuke Aizen', 'Otsutsuki Kaguya', 'Muzan Kibutsuji'];

    foreach ($villains as $villain){
        echo 'Villain: ' . $villain . PHP_EOL;
    }
});




Exibe o seguinte resultado:

Hero: Kurosaki Ichigo
Hero: Uzumaki Naruto
Hero: Kamado Tanjiro
Villain: Sosuke Aizen
Villain: Otsutsuki Kaguya
Villain: Muzan Kibutsuji



"Mas você não disse que era paralelo?"

Sim, mas você não acha que é um código simples e rápido de mais para se perceber isso? Pois, de fato é. 추가 정보를 보려면 Swoole agir에서 목록을 작성하지 마십시오.

A única mudança que faremos no código anterior é adicionar o sleep(); depois de cada echo .


<?php

// Lista os heróis
go(static function () {

    $heros = ['Kurosaki Ichigo', 'Uzumaki Naruto', 'Kamado Tanjiro'];

    foreach ($heros as $hero) {
        echo 'Hero: ' . $hero . PHP_EOL;
        sleep(1);
    }
});

// Lista os vilões
go(static function () {

    $villains = ['Sosuke Aizen', 'Otsutsuki Kaguya', 'Muzan Kibutsuji'];

    foreach ($villains as $villain){
        echo 'Villain: ' . $villain . PHP_EOL;
        sleep(1);
    }
});




E novamente temos a saya:

Hero: Kurosaki Ichigo
Hero: Uzumaki Naruto
Hero: Kamado Tanjiro
Villain: Sosuke Aizen
Villain: Otsutsuki Kaguya
Villain: Muzan Kibutsuji



Não mudou nada. A única coisa diferente neesse segundo código foi a espera de 1 segundo para cada elemento ser impresso. Ainda não sentimos a sensação de que de fato as duas funções estão sendo executadas "ao mesmo tempo". A culpa disso é da função sleep() . 기능 sleep() bloqueante, isso faz com que nosso código seja 절차적. para resolvermos isso executaremos uma função auxiliar do Swoole que faz com que as funções bloqueates do PHP se comportem como não-bloqueantes


<?php

// Método auxiliar que torna o código não-bloqueante bloqueante
Swoole\Runtime::enableCoroutine();


// Lista os heróis
go(static function () {

    $heros = ['Kurosaki Ichigo', 'Uzumaki Naruto', 'Kamado Tanjiro'];

    foreach ($heros as $hero) {
        echo 'Hero: ' . $hero . PHP_EOL;
        sleep(1);
    }
});

// Lista os vilões
go(static function () {

    $villains = ['Sosuke Aizen', 'Otsutsuki Kaguya', 'Muzan Kibutsuji'];

    foreach ($villains as $villain){
        echo 'Villain: ' . $villain . PHP_EOL;
        sleep(1);
    }
});


Com isso finalmente temos nosso código sendo executado de modo alternado:

Hero: Kurosaki Ichigo
Villain: Sosuke Aizen
Hero: Uzumaki Naruto
Villain: Otsutsuki Kaguya
Villain: Muzan Kibutsuji
Hero: Kamado Tanjiro


É isso pessoal, até a próxima :)

좋은 웹페이지 즐겨찾기