PHP 비동기

WBOY
풀어 주다: 2024-08-29 12:51:45
원래의
1149명이 탐색했습니다.

Async는 비동기식을 의미하며, 이는 프로세스가 동기적이지 않음을 의미합니다. 비동기식은 코드의 병렬 실행을 허용합니다. 이는 코드 조각을 서로 독립적으로 개별적으로 실행할 수 있음을 의미합니다. 이것을 일반적으로 비동기 프로세스라고 하며 PHP에서도 마찬가지입니다. 우리는 PHP에 Async 모델을 가지고 있어 동시에 다중 작업을 실행할 수 있습니다. 코드 실행 속도가 빨라지고 성능도 향상됩니다.

광고 이 카테고리에서 인기 있는 강좌 PHP 개발자 - 전문 분야 | 8개 코스 시리즈 | 3가지 모의고사

무료 소프트웨어 개발 과정 시작

웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등

구문:

PHP에서는 Spatie 패키지를 사용하여 비동기 기능을 사용할 수 있습니다. 이 패키지를 사용하면 비동기 호출을 처리하고 프로그램의 병렬 실행을 제공하는 데 도움이 되는 풀을 만들 수 있습니다. 더 잘 설명하기 위해 구문을 살펴보겠습니다. 아래를 참조하세요.

//package to be used
use Spatie\Async\Pool;
$mypool = Pool::create();
$mypool[] = async() {
//your logic goes here
})->then() {
// your logic
});
로그인 후 복사

먼저 여기서 'SpatieAsyncPool' 패키지를 가져와야 합니다. 그런 다음 비동기 작업을 처리할 풀을 생성합니다. 그 안에 'async' 키워드가 뒤따라 병렬로 실행하려는 전체 논리와 코드 조각을 작성합니다. 여기에는 콜백 메서드인 'then' 메서드가 있습니다. 이 안에 우리만의 논리를 작성할 수도 있습니다. 모든 작업이 끝나면 'then' 블록의 지정된 출력에 대해 더 많은 작업을 작성할 수 있습니다.

PHP에서 비동기 기능은 어떻게 작동하나요?

이제 우리는 비동기 기능을 통해 여러 작업을 실행할 수 있다는 것을 알았습니다. PHP의 동기 프로그래밍에 대해 이야기하면 항상 동일한 순서로 출력됩니다. 1부터 10까지의 숫자를 인쇄한다고 가정해 보겠습니다. 따라서 동기 코드를 사용하여 이 논리를 작성하면 항상 오름차순으로 표시됩니다. 그러나 여기서 동일한 논리에 대해 비동기 코드를 사용하려고 하면 숫자 순서가 확실하지 않습니다. 아래의 몇 가지 예를 통해 이에 대해 더 자세히 논의하겠습니다. PHP에서 비동기 코드를 작성하기 위해 'spatie'라는 패키지를 사용했습니다. 이는 또한 비동기 코드에서 오류와 예외를 더 잘 처리할 수 있게 해줍니다. 먼저 이 패키지를 사용하여 간단한 로직을 작성하는 방법을 살펴보겠습니다. 그럼 나중에 비동기 코드와 함께 사용할 수 있는 더 많은 메소드에 대해 자세히 논의하겠습니다.

  • 비동기 블록을 생성하려면 먼저 'spatie' 패키지를 가져오거나 사용해야 합니다. 아래와 같이 코드에서 이를 가져올 수 있습니다. Composer를 사용하여 이 패키지를 설치하겠습니다. 구문 아래에서도 작곡가 명령을 찾을 수 있습니다.

예:

use Spatie\Async
로그인 후 복사

cmd:

composer require spatie
로그인 후 복사
  • 두 번째 단계에서는 풀 개체를 생성합니다. 이 객체를 사용하여 비동기 함수를 작성할 수 있습니다. 더 잘 이해하려면 아래 구문을 참조하세요.

예:

$mypool = Pool::create();
로그인 후 복사

풀 객체에 어떤 이름이라도 붙일 수 있습니다. 또한 'Async' 내부에 있는 Pool 클래스를 가져오는 것을 잊지 마세요. 아래를 참조하세요.

예:

use Spatie\Async\Pool;
로그인 후 복사
  • 이 단계에서는 이제 풀 개체를 사용하여 비동기 기능을 만들 수 있습니다. 함수에 원하는 이름을 부여하고 논리를 작성할 수 있습니다. 더 잘 이해하려면 아래 구문을 참조하세요.

예:

demoAsync(function () {
// //
})
->then(function ($output) {
// //
})
로그인 후 복사

위 코드에서는 비동기 함수를 생성하고 해당 함수의 콜백 메서드인 'then'을 사용하고 있습니다. 이 'then' 함수는 위 코드 블록이 성공적으로 실행될 때 작동하는 역할을 담당합니다. 그렇지 않은 경우에는 다른 Async 방법을 사용하여 해당 사례를 처리해야 합니다.

이제 코드 실행 중에 발생할 수 있는 오류, 예외, 시간 초과를 처리하는 몇 가지 방법을 살펴보겠습니다. 이 패키지는 코드의 비동기 블록 내에서 이를 처리할 수 있는 다양한 방법을 제공합니다. 각각에 대해 자세히 논의해 보겠습니다. 아래를 참조하세요.

1. 시간 초과

코드 블록이 예상 기간 내에 작업을 수행하지 못하거나 오류가 발생하면 메서드가 실행됩니다. 이 메소드를 작성하는 구문은 다음과 같습니다.

예:

timeout(function () {
// when timeout reached.
})
로그인 후 복사

2. 그럼

코드 블록이 성공적으로 실행되고 결과에 대해 추가 작업을 수행해야 하는 경우 메서드가 실행됩니다. 이 메소드를 작성하는 구문은 다음과 같습니다.

예:

then(function ($result) {
// operation after result
})
로그인 후 복사

3. 잡아

이 메서드는 코드 블록에서 예외가 발생하면 실행됩니다. 이 메서드 내에서 이를 처리하고 논리를 수행할 수 있습니다. 이 메소드를 작성하는 구문은 아래와 같습니다.

예:

catch(function ($exp) {
// exception can be handle here.
})
로그인 후 복사

Examples of PHP async

Following are the examples given below:

Example #1

In this example, we are implementing async with the method and printing two messages to keep it simple for beginners.

Code:

use Spatie\Async\Pool;
$mypool = Pool::create();
$mypool
->asyncDemo(function () {
print("async called here !!")
})
->then(function () {
print("then called after result !!")
} ;
로그인 후 복사

Output:

PHP 비동기

Example #2

In this example, we are using all the methods of async from the Spatie\Async\ package. Those are catch, then, and timeout. We keep it simple for now without too much logic.

Code:

use Spatie\Async\Pool;
$mypool = Pool::create();
$mypool
->asyncDemo(function () {
print("async called here !!")
print("async called here !!")
})
->then(function ($output) {
print("print called here !!")
})
->catch(function ($exception) {
print("catch called here !!")
})
->timeout(function () {
print("timeout called here !!")
})
;
로그인 후 복사

Output:

PHP 비동기

Conclusion

By using async in our code, we can enable parallel execution of tasks in our program. Also, they increase the performance of the code because the piece of code is independent of each other. But using StopIteration in situations where the data from the previous block of code is dependent on the current can lead to data loss and inconsistency.

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

관련 라벨:
php
원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿