PHP: Thread Safe vs Non Thread Safe
프로그래밍 언어/PHP

PHP: Thread Safe vs Non Thread Safe

PHP for Windows

여기서 유독 PHP for Windows 버전에서는 Thread Safe, Non Thread Safe 로 나뉘는데 두 개는 어떠한 차이가 있는지 잠깐 살펴보기로 하자. 스레드는 프로세스 내부에서 동작하는 개별 로직이라고 생각하자. 사실 이건 PHP for Windows 의 사이드에서 친절하게 일부 설명이 들어있다.

NTS(Non Thread Safe)

PHP 는 기본적으로 멀티 프로세스 방식으로 처리하는데, PHP 를 CGI 방식으로 사용하게되면 요청마다 프로세스를 생성하는 방식을 취하게 된다. FastCGI 를 사용하면 PHP-FPM(PHP FastCGI Process Menager)가 어련히 알아서 요청을 처리해주므로 괜찮긴 하지만. 이 버전을 사용할 때는 싱글 스레드 일경우다.

NTS refers to single thread only builds.

Windows + IIS(FastCGI, CGI)를 사용하면 Windows 에서도 NTS 버전을 사용하여 구동할 수 있다.

If you are using PHP as FastCGI with IIS you should use the Non-Thread Safe (NTS) versions of PHP.

여담으로, NTS 버전의 경우 멀티 프로세스로 개발된 PHP 가 멀티 쓰레드로 동작하는 Windows 에서 처리하는 경우 문제가 발생했는데, IIS 와 연동해야하는 경우 ISAPI, CGI 방식이 필요했으나 멀티 쓰레드를 필요로하는 ISAPI 를 사용하는 경우 문제가 발생했고, 이를 CGI 로 사용하려 했으나 퍼포먼스 문제로 개발된 것이 NTS 버전이다.

TS(Thread Safe)

Windows + IIS(ISAPI) 라면 TS 버전을 사용하라고 되어있다. 멀티 프로세스가 아닌 멀티 쓰레드를 사용하는 Windows IIS(SAPI)를 위한 것이며, 사실 난 IIS 서버를 써본 적이 없기 때문에 잘은 모르겠지만.

With Apache, using the apache2handler SAPI, you have to use the Thread Safe (TS) versions of PHP. ...TS binaries involves interaction with a multithreaded SAPI and PHP loaded as a module into a web server.

SAPI, 그리고 PHP 가 웹서버 내부에서 모듈로써 로드된다면 이 버전을 사용하라고 되어있으니 참고하자. 일반적으로 IIS 가 아닌 Apache 와 조합한다면, TS 버전을 사용하자.

더 읽을거리

https://www.inflearn.com/course/php7-reboot

https://www.inflearn.com/course/php7-oop

PHP 카테고리 목차 및 문서 정리

2020년, PHP 언어가 가지는 의미

https://www.php.net/manual/en/