>PHP 프레임워크 >Swoole >Swoole 코루틴과 비동기식의 차이점

Swoole 코루틴과 비동기식의 차이점

(*-*)浩
(*-*)浩원래의
2019-12-16 11:05:428216검색

Swoole 코루틴과 비동기식의 차이점

버전 4.0부터 Swoole은 완전한 코루틴 + 채널 기능을 제공하여 새로운 CSP 프로그래밍 모델을 제공합니다.

애플리케이션 계층은 완전 동기식 프로그래밍을 사용할 수 있으며 하위 계층은 자동으로 비동기식 IO를 구현합니다. (추천 학습: swoole 비디오 튜토리얼)

go(function () {
    $redis = new Swoole\Coroutine\Redis();
    $redis->connect('127.0.0.1', 6379);
    $val = $redis->get('key');
});

4.0.0 이상은 PHP7만 지원

버전 4.0.1부터 --enable-coroutine 컴파일 옵션이 제거되고 동적 구성

coroutine으로 변경되었습니다. 선점보다는 협력을 통해 전환하는 순수한 사용자 모드 스레드로 이해될 수 있습니다. 프로세스나 스레드에 비해 코루틴의 모든 작업은 사용자 모드에서 완료될 수 있으며 생성 및 전환 비용이 저렴합니다.

Swoole은 각 요청에 해당하는 코루틴을 생성하고 IO 상태에 따라 코루틴을 합리적으로 예약할 수 있습니다. 이는 다음과 같은 이점을 제공합니다.

개발자는 효과와 성능을 인식하지 않고도 이를 달성할 수 있습니다. 비동기 IO는 기존 비동기 콜백으로 인해 발생하는 개별 코드 로직을 피하고 여러 레이어의 콜백에 갇혀 코드를 유지할 수 없습니다.

동시에 하단 레이어는 코루틴을 캡슐화하기 때문에 기존 PHP 레이어 코루틴에 비해 프레임워크를 사용하면 개발자는 코루틴 IO 작업을 식별하기 위해 수율 키워드를 사용할 필요가 없으므로 더 이상 수율의 의미를 심층적으로 이해할 필요가 없으며 각 수준의 수율 호출을 수정할 필요가 없으므로 개발 효율성이 크게 향상됩니다

예, 대부분의 개발자의 요구 사항을 충족합니다. 비공개 프로토콜의 경우 개발자는 편리한 캡슐화를 위해 코루틴의 TCP 또는 UDP 인터페이스를 사용할 수 있습니다.

채팅 서버에서 방송을 보내거나 웹 서버에서 이메일을 보내는 등 시간이 많이 걸리는 작업을 서버 프로그램에서 수행해야 하는 경우. 이러한 기능을 직접 실행하면 현재 프로세스가 차단되어 서버의 응답 속도가 느려집니다.

Swoole은 현재 요청의 처리 속도에 영향을 주지 않고 실행을 위해 TaskWorker 프로세스 풀에 비동기 작업을 전달할 수 있는 비동기 작업 처리 기능을 제공합니다.

프로그램 코드

는 첫 번째 TCP 서버를 기반으로 하며, onTask와 onFinish라는 두 가지 이벤트 콜백 함수만 추가하면 됩니다. 또한, 작업 프로세스 수를 설정해야 하며, 작업의 소요 시간과 작업량에 따라 적절한 작업 프로세스 수를 구성할 수 있습니다.

$serv = new swoole_server("127.0.0.1", 9501);

//设置异步任务的工作进程数量
$serv->set(array('task_worker_num' => 4));

$serv->on('receive', function($serv, $fd, $from_id, $data) {
    //投递异步任务
    $task_id = $serv->task($data);
    echo "Dispath AsyncTask: id=$task_id\n";
});

//处理异步任务
$serv->on('task', function ($serv, $task_id, $from_id, $data) {
    echo "New AsyncTask[id=$task_id]".PHP_EOL;
    //返回任务执行的结果
    $serv->finish("$data -> OK");
});

//处理异步任务的结果
$serv->on('finish', function ($serv, $task_id, $data) {
    echo "AsyncTask[$task_id] Finish: $data".PHP_EOL;
});

$serv->start();

$serv->task()를 호출한 후 프로그램은 즉시 반환되어 코드를 계속 실행합니다. onTask 콜백 함수는 작업 프로세스 풀에서 비동기적으로 실행됩니다. 실행이 완료된 후 $serv->finish()를 호출하여 결과를 반환합니다.

위 내용은 Swoole 코루틴과 비동기식의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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