프로그래밍 언어/PHP

PHP에서 thread safe 또는 on-thread safe

Rateye 2021. 8. 10. 10:51
728x90
반응형
질문 : PHP에서 스레드 안전 또는 비 스레드 안전은 무엇입니까?

비 스레드 또는 스레드 안전과 같은 PHP 용 다른 바이너리를 보셨습니까?

이것은 무엇을 의미 하는가?

이 패키지의 차이점은 무엇입니까?

답변

다른 웹 서버는 들어오는 HTTP 요청을 병렬로 처리하기 위해 다른 기술을 구현합니다. 꽤 널리 사용되는 기술은 스레드를 사용하는 것입니다. 즉, 웹 서버는 들어오는 각 요청에 대해 단일 스레드를 생성 / 전용합니다. Apache HTTP 웹 서버는 요청 처리를위한 여러 모델을 지원하며, 그중 하나 (작업자 MPM이라고 함)는 스레드를 사용합니다. 그러나 프로세스를 사용하는 프리 포크 MPM이라는 또 다른 동시성 모델을 지원합니다. 즉, 웹 서버는 각 요청에 대해 단일 프로세스를 생성 / 전용합니다.

다른 완전히 다른 동시성 모델 (비동기 소켓 및 I / O 사용)과 두 개 또는 세 개의 모델을 함께 혼합하는 모델도 있습니다. 이 질문에 답하기 위해 위의 두 가지 모델에만 관심이 있으며 Apache HTTP 서버를 예로 들어 보겠습니다.

PHP 자체는 실제 HTTP 요청에 응답하지 않습니다. 이것이 웹 서버의 작업입니다. 따라서 처리를 위해 요청을 PHP로 전달한 다음 결과를 수신하여 사용자에게 다시 보내도록 웹 서버를 구성합니다. 웹 서버를 PHP로 연결하는 방법에는 여러 가지가 있습니다. Apache HTTP Server의 경우 가장 많이 사용되는 것은 "mod_php"입니다. 이 모듈은 실제로 PHP 자체이지만 웹 서버용 모듈로 컴파일되어 내부에 바로로드됩니다.

PHP를 Apache 및 기타 웹 서버와 연결하는 다른 방법이 있지만 mod_php가 가장 널리 사용되는 방법이며 질문에 대한 답변도 제공합니다.

호스팅 회사와 GNU / Linux 배포판에는 우리를 위해 준비된 모든 것이 함께 제공되기 때문에 이전에 이러한 세부 사항을 이해할 필요가 없었을 수 있습니다.

mod_php를 사용하면 PHP가 Apache에 바로로드되기 때문에 Apache가 작업자 MPM (즉, 스레드 사용)을 사용하여 동시성을 처리하려면 PHP가 동일한 다중 스레드 환경에서 작동 할 수 있어야합니다. 즉, PHP는 Apache로 올바르게 공을 칠 수 있도록 스레드로부터 안전해야합니다!

이 시점에서 여러분은 "좋습니다. 멀티 스레드 웹 서버를 사용하고 있고 여기에 PHP를 바로 내장 할 예정이라면 PHP의 스레드 안전 버전을 사용해야합니다"라고 생각해야합니다. 그리고 이것은 올바른 생각입니다. 그러나, PHP의 스레드 안전성 에 대한 논란이 많습니다 . 그것은 당신이 정말로 무엇을하고 있는지 정말로 알고 있다면 사용하는 땅입니다.

궁금한 점이 있다면, 선택권이 있다면 다중 스레드 환경에서 PHP를 사용 하지 않는 것이 좋습니다.

유닉스 기반 환경에 대해서만 말하자면 다행히도 Apache 웹 서버에서 PHP를 사용하려는 경우에만 이것을 생각해야합니다.이 경우 Apache의 prefork MPM을 사용하는 것이 좋습니다. 스레드를 사용하지 않으므로 PHP 스레드 안전성은 중요하지 않습니다.) 그리고 내가 아는 모든 GNU / Linux 배포판은 사용자에게 메시지를 표시하지 않고 패키지 시스템을 통해 Apache + PHP를 설치할 때 결정을 내릴 것입니다. 선택을 위해. nginx 또는 lighttpd 와 같은 다른 웹 서버를 사용하려는 경우 어쨌든 PHP를 포함 할 수있는 옵션이 없습니다. FastCGI 또는 FastCGI를 통해 요청에 응답하는 데 사용되는 여러 PHP 프로세스를 사용하여 PHP가 완전히 웹 서버 외부 에있는 다른 모델에서 작동하는 것과 동일한 것을 사용하는 방법을 살펴볼 것입니다. 이러한 경우 스레드 안전성도 중요하지 않습니다. 웹 사이트에서 사용중인 버전을 확인하려면 <?php phpinfo(); ?> 사이트에서 Server API 항목을 찾으십시오. CGI/FastCGI 또는 Apache 2.0 Handler 와 같이 말할 수 있습니다.

PHP의 명령 줄 버전도 살펴보면 스레드 안전성은 중요하지 않습니다.

마지막으로, 스레드 안전성이 중요하지 않은 경우 어떤 버전을 사용해야합니까? 스레드 안전성 또는 비 스레드 안전성? 솔직히 과학적 답이 없습니다! 하지만 스레드에 안전하지 않은 버전이 더 빠르거나 버그가 적거나 그렇지 않으면 스레드로부터 안전한 버전을 제공하고 우리에게 선택권을주지 않았을 것입니다!

출처 : https://stackoverflow.com/questions/1623914/what-is-thread-safe-or-non-thread-safe-in-php
728x90
반응형