라이브러리
[PHP] parallelFuture::done - 상태 감지
PHP 8.1부터는 Parallel로 병렬 처리를 지원합니다. Parallel은 병렬 처리를 위한 API를 제공하며, Future를 사용하여 비동기 처리를 할 수 있습니다.
Future
Future는 비동기 처리의 결과를 나타내는 객체입니다. Future는 비동기 처리가 완료되면 done() 메서드를 호출하여 결과를 가져올 수 있습니다.
parallelFuture::done
parallelFuture::done은 Future의 done() 메서드입니다. 이 메서드는 Future의 결과를 가져옵니다. 만약 Future가 완료되지 않았으면, 이 메서드는 TimeoutException을 발생시킵니다.
예제
#hostingforum.kr
php
use ParallelPool;
// 5초 후에 "Hello, World!"를 출력하는 Future를 생성합니다.
$future = Pool::create(function() {
sleep(5);
return "Hello, World!";
});
// Future의 결과를 가져옵니다.
$result = $future->done();
// 결과를 출력합니다.
echo $result . "
";
// 5초 후에 "Goodbye, World!"를 출력하는 Future를 생성합니다.
$future2 = Pool::create(function() {
sleep(5);
return "Goodbye, World!";
});
// Future의 결과를 가져옵니다.
$result2 = $future2->done();
// 결과를 출력합니다.
echo $result2 . "
";
예제 설명
위 예제에서는 Parallel을 사용하여 Future를 생성하고, Future의 결과를 가져오는 방법을 설명합니다.
1. `Pool::create` 메서드를 사용하여 Future를 생성합니다. 이 메서드는 callback 함수를 인자로 받습니다. callback 함수는 Future의 처리를 담당합니다.
2. Future의 결과를 가져오기 위해 `done` 메서드를 호출합니다. 만약 Future가 완료되지 않았으면, 이 메서드는 TimeoutException을 발생시킵니다.
3. 결과를 출력합니다.
병렬 처리 예제
#hostingforum.kr
php
use ParallelPool;
// 5초 후에 "Hello, World!"를 출력하는 Future를 생성합니다.
$future1 = Pool::create(function() {
sleep(5);
return "Hello, World!";
});
// 5초 후에 "Goodbye, World!"를 출력하는 Future를 생성합니다.
$future2 = Pool::create(function() {
sleep(5);
return "Goodbye, World!";
});
// Future의 결과를 가져옵니다.
$result1 = $future1->done();
$result2 = $future2->done();
// 결과를 출력합니다.
echo $result1 . "
";
echo $result2 . "
";
병렬 처리 예제 설명
위 예제에서는 Parallel을 사용하여 두 개의 Future를 생성하고, Future의 결과를 가져오는 방법을 설명합니다.
1. `Pool::create` 메서드를 사용하여 두 개의 Future를 생성합니다. 이 메서드는 callback 함수를 인자로 받습니다. callback 함수는 Future의 처리를 담당합니다.
2. Future의 결과를 가져오기 위해 `done` 메서드를 호출합니다. 만약 Future가 완료되지 않았으면, 이 메서드는 TimeoutException을 발생시킵니다.
3. 결과를 출력합니다.
병렬 처리 예제의 장점
위 예제에서 병렬 처리를 사용하면, 두 개의 Future가 동시에 처리되기 때문에, 처리 시간이 단축됩니다. 만약 Future가 순차적으로 처리되면, 처리 시간이 10초가 걸리지만, 병렬 처리를 사용하면, 처리 시간이 5초가 걸립니다.
병렬 처리 예제의 단점
위 예제에서 병렬 처리를 사용하면, Future의 결과를 가져올 때, Future가 완료되지 않았으면, TimeoutException이 발생합니다. 만약 Future가 완료되지 않았으면, Future의 결과를 가져올 수 없기 때문입니다.
-
- 나우호스팅 @pcs8404
-
호스팅포럼 화이팅!
댓글목록
등록된 댓글이 없습니다.