현재 위치: > 최신 기사 목록> Stream_get_Filters 및 Stream_Set_Blocking을 통해 스트림 작동 효율성을 향상시키는 방법?

Stream_get_Filters 및 Stream_Set_Blocking을 통해 스트림 작동 효율성을 향상시키는 방법?

gitbox 2025-05-28

PHP에서 Stream은 파일, 네트워크 및 메모리와 같은 리소스를 처리하기위한 통합 인터페이스입니다. 운영 흐름은 효율적으로 프로그램의 전반적인 성능을 향상시키는 데 중요합니다. 이 기사는 일반적으로 사용되지만 종종 간과되는 두 가지 기능에 중점을 둘 것입니다 : Stream_get_filtersStream_set_blocking은 스트림 작동 효율을 최적화하는 방법을 탐색합니다.

stream_get_filters를 이해하십시오

stream_get_filters 함수는 현재 사용 가능한 스트림 필터 목록을 얻는 데 사용됩니다. 스트림 필터는 데이터를 읽거나 쓸 때 데이터를 동적으로 수정하는 메커니즘 (예 : 데이터를 압축, 암호화 또는 인코딩하는 메커니즘입니다.

샘플 코드 :

 <?php
$filters = stream_get_filters();
print_r($filters);
?>

출력은 다음과 같습니다.

 Array
(
    [0] => string.rot13
    [1] => string.toupper
    [2] => string.tolower
    [3] => convert.iconv.*
    [4] => zlib.*
)

이 필터를 사용하면 PHP 코드를 수동으로 처리하지 않고도 스트림 읽기 및 쓰기 중에 데이터를 자동으로 처리 할 수 ​​있습니다. I/O 운영 후 CPU 처리 오버 헤드를 크게 줄일 수 있습니다.

응용 프로그램 예 : Zlib을 사용하여 스트림 데이터를 압축하십시오

 <?php
$fp = fopen('compress.zlib://example.txt.gz', 'w');
fwrite($fp, 'Hello, Gitbox!');
fclose($fp);
?>

여기서는 Zlib 필터를 사용하여 파일에 먼저 쓰지 않고 파일을 직접 압축 한 다음 GZCompress 로 처리합니다.

stream_set_blocking을 이해합니다

stream_set_blocking 함수는 스트림의 차단 또는 비 블로킹 모드를 전환하는 데 사용됩니다. 기본적으로 스트림이 차단되고 있습니다. 즉, PHP 코드는 계속 실행되기 전에 I/O 작동이 완료되기를 기다립니다.

비 블로킹 모드는 코드가 다음과 같은 I/O를 기다리는 동안 다른 작업을 계속 처리 할 수 ​​있습니다.

  • 다중 스트림 입력 (소켓 등) 폴링

  • 응답 성 향상, 특히 네트워크 대기 시간이 통제 할 수없는 시나리오에서

샘플 코드 :

 <?php
$fp = fopen('http://gitbox.net/data', 'r');
stream_set_blocking($fp, false);

while (!feof($fp)) {
    $data = fread($fp, 1024);
    if ($data) {
        echo $data;
    }
    // 다른 처리 논리,데이터를 기다리는 동안 실행할 수 있습니다
    usleep(100000); // 시뮬레이션 처리 지연
}
fclose($fp);
?>

비 블로킹 모드를 통해이 프로그램은 오랫동안 네트워크 읽기에 갇히지 않아 전체 처리량을 크게 향상시킬 수 있습니다.

성능 최적화 제안

  1. 수동 데이터 처리 감소 : 필기 압축, 암호화 또는 서식 코드 대신 Stream_get_filters 에서 제공하는 내장 필터를 사용하십시오.

  2. 차단 및 대기를 피하십시오 : 네트워크 흐름, 파이프 라인, 소켓 등의 경우 CPU 공회전을 피하기 위해 이벤트 폴링 또는 비동기 모델과 함께 Stream_set_blocking을 사용하십시오.

  3. 스트림 선택기와 결합 : Stream_Select 와 동시에 여러 개의 스트림을 듣고 대기 시간을 더 줄일 수 있습니다.