PHP & Others

[PHP] Thread safe / non Thread safe

페이지 정보

본문

출처 : http://solskjaer.tistory.com/19

윈도우는 멀티스레드 방식
리눅스는 멀티프로세스 방식

MPM prefork는 멀티프로세스
MPM worker는 멀티스레드

스레드 안전 - 멀티스레드 환경하에 하나의 자원에 여러 스레드가 동시에 접근해도 프로그램의 실행에 문제가 없음을 뜻함

Windows + IIS(ISAPI) : VC9 Thread Safe 버전
Windows + IIS(CGI + FastCGI) : VC9 Non Thread Safe 버전
Windows + 아파치(MPM worker) : VC6 Thread Safe 버전
Windows + 아파치(MPM prefork) : VC6 Non Thread Safe 버전


----------------------------------------------------------------------
출처 : http://cafe.naver.com/phpcafe/7753

VC6: Apache용 
VC9: IIS용


[Thread Safe 와 Non Thread Safe]

우선 윈도우용 PHP는 항상 Thread Safe 버전으로 나왔었습니다.
이유는 윈도우가 멀티쓰레드 방식인데 PHP는 멀티프로세스 방식으로 개발되었기 때문이죠
참고로 리눅스나 유닉스는 원래 멀티프로세스 방식이었기에 문제가 되지 않았습니다.

PHP를 IIS와 연동하기 위해 CGI 또는 ISAPI 방식으로 연동을 합니다. 
그런데 PHP와 관련된 모듈이 대부분 멀티프로세스 방식으로 개발되었기 때문에
멀티쓰레드 방식으로 개발된 ISAPI로 연동하였을 경우 서버가  다운되는 현상이 나타났습니다.

그래서 안정적인 방법으로 CGI 방식을 사용하긴 하지만 이 것 역시 퍼포먼스 측면에서 너무 느리다는게 문제가가 되있죠.
이 퍼포먼스 문제를 개선한 것이 Non Thread Safe 버전이라고 생각하시면 되겠습니다.


그럼 결론적으로 아래와 같은 조합이라고 생각할 수 있겠죠


Windows + IIS(ISAPI) : VC9 Thread Safe 버전
Windows + IIS(CGI + FastCGI) : VC9 Non Thread Safe 버전
Windows + 아파치(MPM worker) : VC6 Thread Safe 버전
Windows + 아파치(MPM prefork) : VC6 Non Thread Safe 버전

관련자료

등록된 댓글이 없습니다.
Today's proverb
인내심을 가져라. 때가 되면 모든 것은 변한다. 조바심이 가을의 영광을 만들거나 살을 에는 겨울을 끝낼 수 는 없다. 근심을 오랫동안 마음에 품고 있으면 그만큼 마음의 평정을 회복하기 어려워진다. 나쁜 생각을 스스로 떨쳐버려라. 나쁜 생각은 영혼의 뿌리를 갉아먹는 악이다.