CGI

2012-09-03 2 views
-1

사람은 CGI에 golang의 문서에서 발췌을 설명해주십시오 수 :CGI

"CGI를 사용하여 일반적으로 사용하는 것보다 덜 효율적 각 요청을 처리하기 위해 새로운 프로세스를 시작하는 의미 주 이 패키지는 주로 기존 시스템과의 호환성을 목적으로합니다. "

저는 데이터베이스를 넣고 가져 오는 데 CGI를 사용합니다.

이것은 비효율적입니까? '장기 실행 서버'를 사용해야합니까?

만약 그렇다면 그 의미는 무엇이며 어떻게 구현합니까?

... http://golang.org/pkg/net/http/cgi/

답변

2

예, 그것은 비효율적이다. 완전히 새로운 프로세스를 시작하는 비용은 일반적으로 기존 프로세스에 연결하거나 현재 프로세스 내의 스레드에서 작업하는 것 이상의 의미가 있습니다.

필요한지 여부에 따라 달라집니다. Google과 경쟁 할 수있는 검색 엔진을 만드는 경우 CGI가 이 아니라는 것이 좋습니다 ().

개인 웹 사이트가 한 시간에 한 번 액세스하는 경우 나는 아마도 그걸로 벗어날 수 있다고 생각합니다.

장시간 실행되는 서버의 경우 일반적으로 항상 실행중인 웹 서버용 플러그인과 같은 것을 쓸 수 있으며 웹 서버는 필요할 때 요청을 전달합니다. "그것").

그런 식으로 준비가 완료되었으므로 웹 서버가 요청을 처리하기 위해 다른 프로세스를 시작하는 동안 기다릴 필요가 없습니다.

실제로 Apache 자체는 런타임에 Apache에 통합되는 모듈 (플러그인과 같은)을 통해 CGI를 처리합니다. 즉, 외부 프로세스의 실제 호출은 해당 모듈에서 으로 처리됩니다. 소스 코드는 웹 검색을 수행하는 경우 도움이된다고 생각하면 mod_cgi.c에서 찾을 수 있습니다.

또 다른 예는 this link에서 사용할 수있는 Perl 인터프리터 모듈 인 mod_perl입니다.

+0

이런 종류의 플러그인을 결합하여 활용하는 방법을 알 수 있도록 이러한 플러그인의 예를 링크 할 수 있습니까? 감사합니다 – Peregrine

+0

그래서 내 아파치 서버와 함께 mod_cgi를 사용하고 html POST에 의해 시작된 python CGI 스크립트를 작성하면 처리기로 스크립트를 지정하는 한 mod_cgi 모듈 내에서 자체 고유 프로세스를 대신 할 것입니다. 이 비효율 문제를 해결 하시겠습니까? – Peregrine

+0

@PrincePeregrine : 아니오,'mod_cgi'은 _within_ Apache를 실행하는 모듈입니다. 그러나 그 책임은 CGI (즉, 외부 프로세스)를 통해 _other_ 프로세스를 시작하는 것입니다. 파이썬 코드가 아파치 내에서 실행되기를 원한다면, mod_python이 필요하다 : http://www.modpython.org/ – paxdiablo

0

하나의 옵션은 각 요청을 계속 재시작하지 않는 장기 실행 서버 프로그램 인 fastcgi입니다. 예전에는 C/C++, FPC 등의 언어로 시간이 지남에 따라 메모리 누수로 인해 단점을 보였지만 가비지 콜렉션이 아니기 때문에 빠릅니다. 웹 사이트에 수백만 건의 조회가 발생한 후 하나의 fastcgi 프로그램에서 작은 메모리가 누출되면 서버가 다운 될 수 있지만 일반 CGI는 가비지 컬렉터 그 자체입니다. 프로그램이 다시 시작되고 누군가가 페이지를 요청하고 cgi를 종료 할 때마다 정리됩니다. Go lang 메모리의 경우 메모리 누수가 걱정되지 않지만 빠른 cgi에는 숨겨진 잡티가있을 수 있습니다. golang이 가비지 컬렉터 자체에서 메모리 누수가있는 경우 ... (거의 발생하지 않지만이 같은 고치기가 팝업 될 수도 있습니다. 힙 조각화 ....)

일반적으로 fastcgi 및 "장기 실행"은 조숙 한 최적화입니다. 나는 매일 5 명의 방문자가있는 개인 홈페이지 웹 사이트에 "fastcgi를 사용해야한다"고 소리 쳤습니다. 실제로 그들은 하루에 500 만명의 방문자가 필요할 것입니다. 그러나 그들은 엉덩이와 냉기를 좋아해서 생각하기 시작합니다. 그들의 사이트가 심지어 3 명의 사람에 의해 알려져 있기 전에 빠른 cgi.

당신은 스스로에게 물어볼 필요가 있습니다 : 사용하는 서버는 많은 트래픽을 가지고 있으며, 많은 트래픽으로 나는 하루에 100 명의 방문자를 의미하지는 않습니다 ... 심지어 1000 명의 고유 방문자가 많지 않습니다. .

아파치 서버를위한 Go lang cgi 프로그램을 만들지, go 서버를위한 파이썬 프로그램을 만들지, 아니면 파이썬과 펄을위한 cgi 기능을 가진 go 서버를 작성하는지 여부는 분명하지 않다. 당신이 실제로하고있는 것을 명확히하십시오.

누군가가 다른 답변을 게시 한 검색 엔진으로 Google과 비교하면 : Google의 역사를 보면 실제로 PHP를 사용하지 않고 C++ 시스템에서 C++/C로 코드를 작성했습니다. , 또는 기타 엉덩이와 아이들이 사용하는 멋진 것들. Backrub 프로젝트와 템플릿 시스템을 살펴보십시오. 그것은

https://www.google.com/search?safe=off&q=google+backrub+template+ctemplate

로 Fastcgi 어쩌면 FastCGI를이 전에 구글에서 알아 낸 것이 었습니다 (..... C HTML 템플릿에라는 컴파일 된 프로그램) Ctemplate라고하거나 유사한 자신의 독점적 인 솔루션을 있었다 fastcgi, 나는 Google에서 일하지 않았기 때문에 모르겠다.하지만 옛날 Cognos를 사용하기 위해 C++/C 프로그램을 사용했기 때문에 일부 cgi 기술을 사용해 왔음에 틀림 없다. 그것은 속도에 대한 CGI 기술을 수정 한 경우.