쉬운예로
database에 접속하는 db 라는 객체의 경우 쿼리가 많더라도 연결(connect)은 한번만 되는게 맞습니다.
하지만 클래스나 함수내에서 database 에 쿼리를 넣을때마다 매번 db 객체를 생성(new)하면 매번 연결되겠죠
이럴경우 이미 생성된 db 객체를 싱글톤으로 받으면 최초 한번 생성된 객체를 사용하여 database 에 접근할 수 있습니다.
물론 database 연결같은 경우 언어차원에서 최적화된 방법을 제공하기도해서 임의의 싱글톤사용이 퍼포먼스를 크게 향상시킨다고 단정할 순 없지만
db에 요청된 쿼리의 분석같은 단일객체를 유지하는게 필수적인 경우 유용합니다.
전역변수로 생성하거나 해당 객체를 매번 클래스마다 건네받기에는 코드의 안정성이나 효율문제도 있고 확장의 문제도 있겠죠.
질문에 대한 직접적인 답변을 하라면,
한번의 request동안 진행되는 여러개의 프로세스에서 싱글톤으로 사용하기 위함. 정도라고보면 되겠네요.
싱글톤을 사용하는 목적에는 퍼포먼스 향상도 있지만
싱글톤을 사용하는 목적에는 퍼포먼스 향상도 있지만 객체의 안전한 사용도 있습니다.
쉬운예로
database에 접속하는 db 라는 객체의 경우 쿼리가 많더라도 연결(connect)은 한번만 되는게 맞습니다.
하지만 클래스나 함수내에서 database 에 쿼리를 넣을때마다 매번 db 객체를 생성(new)하면 매번 연결되겠죠
이럴경우 이미 생성된 db 객체를 싱글톤으로 받으면 최초 한번 생성된 객체를 사용하여 database 에 접근할 수 있습니다.
물론 database 연결같은 경우 언어차원에서 최적화된 방법을 제공하기도해서 임의의 싱글톤사용이 퍼포먼스를 크게 향상시킨다고 단정할 순 없지만
db에 요청된 쿼리의 분석같은 단일객체를 유지하는게 필수적인 경우 유용합니다.
전역변수로 생성하거나 해당 객체를 매번 클래스마다 건네받기에는 코드의 안정성이나 효율문제도 있고 확장의 문제도 있겠죠.
질문에 대한 직접적인 답변을 하라면,
한번의 request동안 진행되는 여러개의 프로세스에서 싱글톤으로 사용하기 위함. 정도라고보면 되겠네요.
time to wait...
답변 감사드립니다!
답변 감사드립니다!
http://mr.hanul.co
PHP memory share
Shared Memory in PHP
http://kr.php.net/manual/en/book.shmop.php
http://kr.php.net/manual/en/shmop.examples-basic.php
또 하나 덧붙여
apache 에서도 prefork가 아닌 worker 방식을
쓰면 매번 프로세스를 생성하지도 않는 것으로 알고 있습니다.
댓글 달기