라이브러리

[PHP] Thread::join - 동기화




PHP에서 Thread::join 사용하기

PHP는 멀티스레딩을 지원하는 언어 중 하나입니다. PHP 7.4부터는 `Thread` 클래스가 추가되어 멀티스레딩을 쉽게 처리할 수 있습니다. 이 클래스의 `join` 메서드는 스레드가 종료될 때까지 대기하는 메서드입니다.

스레드 만들기


스레드를 만들기 위해서는 `Thread` 클래스를 상속받는 클래스를 만들고 `run` 메서드를 오버라이딩해야 합니다. `run` 메서드는 스레드가 실행되는 메서드입니다.

#hostingforum.kr
php

class MyThread extends Thread {

    public function run() {

        echo "스레드가 실행 중입니다.
";

        sleep(2); // 2초 대기

        echo "스레드가 종료되었습니다.
";

    }

}



스레드 실행 및 join


스레드를 실행하고 종료를 기다리기 위해서는 `start` 메서드를 호출하고 `join` 메서드를 호출합니다.

#hostingforum.kr
php

$thread = new MyThread();

$thread->start();



// 스레드가 종료될 때까지 대기

$thread->join();



echo "스레드가 종료되었습니다.
";



스레드 여러 개 만들기


스레드를 여러 개 만들고 종료를 기다리기 위해서는 스레드 객체를 배열에 저장하고 `join` 메서드를 호출할 수 있습니다.

#hostingforum.kr
php

$threads = [];



for ($i = 0; $i < 5; $i++) {

    $thread = new MyThread();

    $thread->start();

    $threads[] = $thread;

}



foreach ($threads as $thread) {

    $thread->join();

}



echo "모든 스레드가 종료되었습니다.
";



예외 처리


스레드가 예외를 발생시키면 `join` 메서드는 예외를 캐치하고 스레드가 종료될 때까지 대기합니다. 예외를 캐치하고 싶지 않다면 `join` 메서드를 호출하기 전에 `isAlive` 메서드를 호출하여 스레드가 살아 있는지 확인할 수 있습니다.

#hostingforum.kr
php

$thread = new MyThread();

$thread->start();



if (!$thread->isAlive()) {

    echo "스레드가 이미 종료되었습니다.
";

} else {

    try {

        $thread->join();

    } catch (Exception $e) {

        echo "스레드가 예외를 발생시켰습니다.
";

    }

}



결론


PHP에서 `Thread::join` 메서드는 스레드가 종료될 때까지 대기하는 메서드입니다. 스레드를 만들고 실행하는 방법, 스레드 여러 개 만들기, 예외 처리 방법을 알아보았습니다. 멀티스레딩을 사용하여 프로그램의 성능을 향상시키고, 병렬 처리를 쉽게 처리할 수 있습니다.
  • profile_image
    나우호스팅 @pcs8404 

    호스팅포럼 화이팅!

    댓글목록

    등록된 댓글이 없습니다.

  • 전체 8,985건 / 85 페이지

검색

게시물 검색