>  기사  >  백엔드 개발  >  PHP에서 Swoole을 사용하는 이유는 무엇입니까?

PHP에서 Swoole을 사용하는 이유는 무엇입니까?

藏色散人
藏色散人앞으로
2019-04-23 11:08:5612168검색

저는 지난 두 달 동안 Swoole을 공부해왔기 때문에 이 글의 도움으로 Swoole을 더 많은 사람들에게 알리고 싶습니다. Swoole은 현재 일부 고급 PHP 사용자를 위한 장난감으로 포지셔닝되어 중급 및 저급 사용자에게 위협적일 수 있으며 일부 응용 프로그램 시나리오에서는 혼란스러울 수도 있지만 실제로는 그렇게 어렵지 않습니다.

Swoole 공식 홈페이지에 소개된 자기 소개는 “프로덕션 환경을 위한 PHP 비동기 네트워크 통신 엔진”입니다. 우선, Swoole은 Http, TCP, UDP, WebSocket을 지원하는 네트워크 애플리케이션 개발 도구입니다.

Swoole과 기존 PHP 개발에는 차이점이 있으며, 이해해야 할 개념도 있습니다. 현재 Swoole 기반 프레임워크를 사용하여 개발하는 경우 개발 습관은 기존 TP 및 LV 프레임워크와 유사합니다.

그럼 왜 Swoole을 사용하는 걸까요?

다음과 같은 점이 있다고 생각합니다.

상주 메모리, 반복 로딩으로 인한 성능 손실 방지, 엄청난 성능 향상

코루틴 비동기, I/O 집약적인 시나리오(WeChat 개발, 결제 등)에 대한 동시 처리 기능 향상 , 로그인 등)

하드웨어와 통신이 가능한 Http, WebSocket, TCP, UDP 등의 애플리케이션을 편리하게 개발

PHP 고성능 마이크로서비스 아키텍처가 현실화되었습니다

상주 메모리

현재 기존 PHP 프레임워크에서는 각 요청을 처리하기 전에 프레임워크 파일 및 구성을 로드하는 작업이 완료되어야 합니다. 이것이 성능 문제의 큰 원인이 되었을 수도 있지만 Swoole을 사용하면 여러 번 로드하고 사용하면 그런 문제가 없습니다.

Coroutine

아래 그림과 같이 동일한 스레드가 동시 요청을 처리하는 시나리오입니다. 예를 들어 다른 API 인터페이스를 호출해야 하거나 인터페이스에서 대용량 파일을 읽고 써야 하는 경우 전통적인 동기식 차단과 코루틴 비동기식은 그 자체로 나타납니다.

PHP에서 Swoole을 사용하는 이유는 무엇입니까?

Swoole 코루틴이 I/O 집약적 시나리오에 적합한 이유를 자세히 설명하세요.

코루틴에 관해 말하자면, 먼저 우리 모두 알고 있듯이 프로세스는 많은 리소스를 차지합니다. 요청을 처리하기 위해 많은 수의 프로세스가 발생하는 것은 확실히 손실보다 이득이 더 큽니다. CPU 수준에서는 여러 개의 코어가 여러 작업을 수행하는 다중 스레드 애플리케이션이 많이 있습니다. 스레드가 너무 많이 생성되면 스레드 예약이 손실됩니다.

코루틴은 단일 스레드 기반으로 구현되어 I/O를 기다리는 동안 CPU 리소스를 낭비하지 않고 최대한 활용할 수 있습니다. 물론 코루틴이 많을수록 더 많은 메모리를 차지하지만 프로세스 및 스레드에 비해 차지하는 리소스는 상대적으로 적습니다.

코루틴을 사용할 때 파일 읽기 및 쓰기, 인터페이스 요청 등과 같은 시나리오가 발생하면 코루틴이 자동으로 일시 중지되고 작업을 수행하기 위해 CPU가 다른 코루틴에 할당됩니다. 이렇게 하면 단일 스레드 CPU 리소스 활용도가 향상될 수 있습니다. 낭비를 줄여 성능을 향상시킵니다.

코루틴 코드 예시:

<?php
use Swoole\Coroutine as co;
 
// 协程
$time = microtime(true);
// 创建10个协程
for($i = 0; $i < 10; ++$i)
{
    // 创建协程
    go(function() use($i){
        co::sleep(1.0); // 模拟请求接口、读写文件等I/O
        echo $i, PHP_EOL;
    });
}
swoole_event_wait();
echo &#39;co time:&#39;, microtime(true) - $time, &#39; s&#39;, PHP_EOL;
 
// 同步
$time = microtime(true);
// 创建10个协程
for($i = 0; $i < 10; ++$i)
{
    sleep(1); // 模拟请求接口、读写文件等I/O
    echo $i, PHP_EOL;
}
echo &#39;sync time:&#39;, microtime(true) - $time, &#39; s&#39;, PHP_EOL;

실행 결과:

0
9
8
7
6
5
4
3
2
1
co time:1.0087130069733 s
0
1
2
3
4
5
6
7
8
9
sync time:10.010055065155 s

위 결과에서 볼 수 있듯이 코루틴 모드의 실행은 순차적이지 않으며 절전 모드에서는 현재 스레드의 작업 실행 권한이 더 높아집니다. 다른 코루틴에게 넘겨줍니다.

Creating Http service

는 실제로 상상만큼 어렵지 않습니다. 코드를 살펴보세요.

$http = new swoole_http_server("127.0.0.1", 9501);
$http->on(&#39;request&#39;, function ($request, $response) {
    $response->end("<h1>Hello Swoole. #".rand(1000, 9999)."</h1>");
});
$http->start();

Microservices

Tars는 Tencent가 2008년부터 2008년까지 사용해 온 백엔드 로직 레이어용 통합 애플리케이션 프레임워크 TAF입니다. 오늘(Total Application Framework)은 현재 C++, Java, PHP 및 Nodejs 언어를 지원합니다. 이 프레임워크는 사용자에게 개발, 운영, 유지 관리, 테스트를 포함하는 완전한 솔루션 세트를 제공하여 제품이나 서비스가 신속하게 개발, 배포, 테스트 및 온라인화되도록 돕습니다. 확장 가능한 프로토콜 인코딩 및 디코딩, 고성능 RPC 통신 프레임워크, 이름 라우팅 및 검색, 릴리스 모니터링, 로그 통계, 구성 관리 등을 통합합니다. 이를 통해 마이크로서비스를 사용하여 안정적이고 신뢰할 수 있는 분산 애플리케이션을 신속하게 구축할 수 있으며, 완전하고 효과적인 서비스 거버넌스.

혹시 틀린 부분이 있으면 지적해주세요. 스울을 정말 추천드리고 싶어요!

위 내용은 PHP에서 Swoole을 사용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yurunsoft.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제