>  기사  >  PHP 프레임워크  >  Swoole의 코루틴 및 비동기 프로그래밍 실습

Swoole의 코루틴 및 비동기 프로그래밍 실습

PHPz
PHPz원래의
2023-06-13 22:36:12860검색

인터넷 애플리케이션의 지속적인 개발로 인해 높은 동시성은 모든 개발자가 직면해야 하는 과제가 되었습니다. 높은 동시성에 대처하기 위해 프론트엔드 학생들은 프런트엔드 디스플레이, 비동기 I/O 등의 기술을 사용하고, 백엔드 학생들은 코루틴, 비동기 프로그래밍 기술을 사용합니다. 그중 Swoole은 PHP 언어의 코루틴 프레임워크입니다. 코루틴과 비동기 프로그래밍 아이디어를 사용하여 높은 동시성에서 개발 및 디버깅을 단순화하고 개발자에게 더 나은 개발 경험을 제공합니다.

1. 코루틴과 비동기 프로그래밍의 개념

코루틴에 대한 이해는 간단히 "마이크로 스레드"로 이해하면 됩니다. 이는 스레드와 유사한 개념이지만 스레드 전환 메커니즘과는 다릅니다. 코루틴은 운영 체제 커널의 스레드가 아니지만 사용자 프로세스 내에서 전환됩니다. 코루틴을 사용하면 비차단 대기를 수행하는 동시에 CPU 활용도를 높이고 컨텍스트 전환 횟수를 줄일 수 있습니다.

비동기 프로그래밍은 "이벤트 중심" 프로그래밍 방법입니다. 주요 특징은 I/O 차단 대기로 인해 발생하는 스레드 대기 시간을 방지하고 동시성을 높이는 비차단 I/O를 사용하는 것입니다. 비동기 프로그래밍에서 이벤트가 완료되면 프로그램은 스레드를 차단하고 기다리게 하는 대신 관련 스레드에 처리를 계속하도록 알립니다. 비동기 프로그래밍은 콜백을 사용하여 비동기 작업을 처리하여 코루틴 간의 교대를 처리하고 프로그램의 동시 처리 기능을 향상시킵니다.

2. Swoole의 코루틴 및 비동기 프로그래밍 실습

  1. coroutine

Swoole 코루틴은 PHP 언어 환경의 프로세스와 스레드에서 코루틴 메커니즘을 시뮬레이션하고 구현합니다. Swoole의 코루틴에서는 코루틴 스케줄러를 사용하여 PHP의 실행 제어를 코루틴에 넘겨 I/O 차단 대기로 인한 스레드 대기 시간을 방지하고 운영 효율성을 향상시킬 수 있습니다. 코루틴은 swoole_coroutine_create() 및 swoole_coroutine_resume() 함수를 사용하여 코루틴 간 전환을 실현합니다. 동시에 Swoole은 swoole_event_add(), swoole_event_set() 등과 같은 이벤트 기반 기능을 제공하여 코루틴 프로그래밍 모델을 크게 단순화합니다.

아래에서는 코드 실습을 통해 Swoole 코루틴의 사용법을 단계별로 이해해보겠습니다.

1) Swoole 확장 설치

먼저 Swoole 코루틴 개발을 구현하려면 Swoole 확장을 설치해야 합니다. Swoole 확장은 다음 명령을 통해 설치할 수 있습니다:

$ pecl install swoole

2) 코루틴 생성

다음으로 코루틴을 생성하고 swoole_coroutine_resume() 함수를 사용하여 코루틴을 실행해야 합니다. 구체적인 코드는 다음과 같습니다.

<?php
function test_coroutine(){
    echo "Start coroutine
";
    swoole_coroutine::sleep(1);
    echo "End coroutine
";
}
swoole_coroutine::create("test_coroutine");
echo "Main func end
";

코루틴을 생성하기 위해 코드에서 swoole_coroutine_create() 함수를 사용하고, test_coroutine() 함수를 전달하는 것을 볼 수 있습니다. 이때 시스템은 아직 코루틴이 실행되지 않은 상태로 swoole_coroutine_create()를 호출한 후 코루틴 스케줄러에 제출하고 실행을 기다립니다. 다음으로 swoole_coroutine_resume() 함수를 호출하면 test_coroutine() 함수가 실행되어 해당 결과가 출력된다.

3) 코루틴 간 전환

코루틴에서는 swoole_coroutine_yield() 함수를 사용하여 코루틴을 수동으로 전환할 수도 있습니다. 구체적인 구현 코드는 다음과 같습니다.

<?php
function test_coroutine(){
    for ($i=0; $i<5; $i++){
        echo "Coroutine $i
";
        swoole_coroutine::yield();
    }
}
$c = swoole_coroutine::create("test_coroutine");
for ($i=0; $i<5; $i++){
    swoole_coroutine::resume($c);
}

위 코드를 통해 코루틴을 생성하고 test_coroutine() 함수를 5번 반복하여 코루틴 번호를 출력했습니다. swoole_coroutine_yield() 함수를 통해 여러 코루틴을 공정하게 처리할 수 있도록 코루틴을 수동으로 전환할 수 있습니다.

  1. 비동기 프로그래밍

Swoole의 비동기 프로그래밍은 주로 woole_event_add(), swoole_event_set() 및 swoole_event_wait()와 같은 이벤트 중심 함수를 기반으로 구현됩니다. 구체적으로, woole_event_add() 및 swoole_event_set() 함수는 이벤트 루프에 I/O 이벤트를 추가하는 데 사용되고, swoole_event_wait() 함수는 이벤트 루프를 시작하는 데 사용됩니다.

아래에서는 Swoole의 비동기 프로그래밍 실습을 코드를 통해 단계별로 이해하겠습니다.

1) Swoole 확장 설치

먼저 Swoole 비동기 프로그래밍 개발을 활성화하려면 Swoole 확장을 설치해야 합니다. Swoole 확장은 다음 명령을 통해 설치할 수 있습니다:

$ pecl install swoole

2) 비동기 TCP 통신

Swoole에서는 swoole_client 및 swoole_server를 통해 시스템 간 비동기 TCP 통신을 지원할 수 있습니다. 비동기 TCP 통신에서는 SwooleServer를 사용하여 TCP 서비스를 시작하고 서버 측에서 swoole_event_add() 함수를 사용하여 서비스에 I/O 이벤트를 추가해야 합니다. 메시지 발신자는 swoole_client를 사용하여 비동기 통신을 구현합니다. 구체적인 구현 코드는 다음과 같습니다.

<?php
//异步TCP服务端
$serv = new swoole_server("127.0.0.1", 9501);
$serv->set(array(
    'worker_num' => 4,
    'daemonize' => false,
));

$serv->on('Receive', function ($serv, $fd, $from_id, $data) {
    $serv->send($fd, 'Server: '.$data);
    $serv->close($fd);
});

$serv->start();
<?php
//异步TCP客户端
$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);

$client->on("connect", function($cli) {
    $cli->send("hello world
");
});

$client->on("receive", function($cli, $data){
    echo "Received: ".$data."
";
});

$client->on("error", function($cli){
    echo "Connect failed
";
});

$client->on("close", function($cli){
    echo "Connection closed
";
});

$client->connect('127.0.0.1', 9501);

위 코드를 통해 비동기 TCP 통신의 예시를 구현했습니다. 클라이언트가 메시지를 보내면 서버는 메시지를 수신하고 처리 결과를 반환합니다.

요약:

이 글에서는 주로 Swoole 코루틴과 비동기 프로그래밍의 실습을 설명합니다. 동시성 인터넷 애플리케이션을 개발할 때 비동기 프로그래밍과 코루틴을 사용하면 시스템 성능을 효과적으로 향상하고 개발 효율성을 높일 수 있습니다. Swoole 프레임워크는 우수한 코루틴 및 비동기 프로그래밍 지원을 제공하므로 프로그래머는 효율적인 비동기 처리 및 코루틴 스케줄링을 쉽게 구현할 수 있으므로 시스템의 동시 처리 기능이 향상됩니다.

위 내용은 Swoole의 코루틴 및 비동기 프로그래밍 실습의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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