라이브러리

[PHP] Threaded::notifyOne - 동기화




PHP Threaded::notifyOne


PHP는 멀티스레딩을 지원하는 언어 중 하나입니다. PHP 7.4부터는 Threaded 클래스가 추가되어 스레드 기반의 프로그래밍을 지원합니다. Threaded::notifyOne 메소드는 notify 메소드와 유사하지만, notify 메소드는 모든 대기중인 스레드를 깨우지만, notifyOne 메소드는 대기중인 스레드 중 하나만 깨웁니다.

Threaded::notifyOne 사용 예제


아래 예제는 Threaded::notifyOne 메소드를 사용하는 예제입니다.

#hostingforum.kr
php

class MyThread extends Threaded {

    private $flag;



    public function __construct() {

        $this->flag = false;

    }



    public function run() {

        echo "스레드 시작
";

        while (!$this->flag) {

            echo "스레드 대기 중...
";

            $this->wait();

        }

        echo "스레드 종료
";

    }



    public function notifyOne() {

        $this->flag = true;

        $this->notifyOne(); // notifyOne 메소드를 호출하여 대기중인 스레드 중 하나를 깨움

    }

}



$thread = new MyThread();

$thread->start();



// 1초 후 notifyOne 메소드를 호출하여 대기중인 스레드 중 하나를 깨움

sleep(1);

$thread->notifyOne();



// 스레드가 종료되면 종료 메시지를 출력합니다.

$thread->join();

echo "스레드 종료
";



Threaded::notifyOne 메소드의 동작


위 예제에서, 스레드는 대기중인 상태에서 notifyOne 메소드를 호출하여 대기중인 스레드 중 하나를 깨웁니다. notifyOne 메소드는 대기중인 스레드 중 하나를 깨우기 때문에, notify 메소드와는 다르게 모든 대기중인 스레드를 깨우지 않습니다.

Threaded::notifyOne 메소드의 장점


Threaded::notifyOne 메소드는 대기중인 스레드 중 하나만 깨우기 때문에, notify 메소드보다 성능이 좋습니다. notify 메소드는 모든 대기중인 스레드를 깨우기 때문에, notifyOne 메소드보다 더 많은 시스템 리소스를 사용합니다.

Threaded::notifyOne 메소드의 단점


Threaded::notifyOne 메소드는 대기중인 스레드 중 하나만 깨우기 때문에, notify 메소드보다 안전성이 떨어집니다. notify 메소드는 모든 대기중인 스레드를 깨우기 때문에, notifyOne 메소드보다 더 많은 스레드가 동시에 실행될 수 있습니다.

결론


Threaded::notifyOne 메소드는 대기중인 스레드 중 하나만 깨우기 때문에, notify 메소드보다 성능이 좋습니다. 그러나 notify 메소드보다 안전성이 떨어집니다. 따라서, notifyOne 메소드를 사용할 때는 주의하여 사용해야 합니다.
  • profile_image
    나우호스팅 @pcs8404 

    호스팅포럼 화이팅!

    댓글목록

    등록된 댓글이 없습니다.

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

검색

게시물 검색