2013-01-12 5 views
4

PHP exec() performance에서 exec()를 실행하면 오버 헤드가 발생하지만 큰 프로그램이나 웹 사이트에서는 백엔드의 일부를 다른 언어로 작성하는 것이 좋지 않다고 생각합니다. 그리고 PHP는 exec를 사용하여 프로그램을 호출합니까?PHP exec()를 사용하여 백엔드 속도 향상

예를 들어, PHP는 2.3 초, 자바는 .52, C++은 .33을 사용하여 대량의 문자열 조작으로 테스트를 작성/실행했습니다. 속도 차이는 이미 분명합니다. 작업을 멀티 스레드하면 시간이 더 빨리 단축 될 수 있습니다. 나는 또한 병렬 다른 언어로 코드를 작성할 필요 이외의 모든 혜택과 함께

exec("./largeoperation > mydir/$dirname.data &"); 
//or 
exec('java Backend > /dev/null 2>&1 &'); 

처럼 뭔가에 달성 할 수 있다는 것을 발견, 나는 내 백엔드의 많은 부분을 이관하지 말아야 이유를 실패 다른 언어로 작성된 더 빠른 프로그램 또한, 나는 Working with Php-Java Bridge과 같은 브릿지의 존재를 안다. 그러나 그것이 단순한 exec()보다 훨씬 빠르다는 것을 나는 확신하지 못한다. 누구든지 exec()에 대한 자세한 내용을 알고 있습니까? 당신이 농장 exec 친구를 사용하여 다른 프로그램으로 해결할 수 있지만

+1

아마도 'exec'를 통해 프로그램을 호출하는 대신 [메시지 큐] (http://en.wikipedia.org/wiki/Message_queue)와 작업자를 사용하고 싶을 것입니다. 나는 [Gearman] (http://gearman.org/)을 좋아한다. – Charles

+0

Gearman은 믿을 수 없습니다. 정말 고맙습니다! – wonton

+1

또 다른 변환! 컬트에 오신 것을 환영합니다. Lemme이 대답을 정리하면이 문제를 해결할 수 있습니다. – Charles

답변

4

, 당신이하려는 일이 가장 잘 message queue 시스템을 사용하여 수행됩니다. 잘 설계된 메시지 대기열을 사용하면 필요한 언어로 작업자 프로그램을 작성할 수 있습니다. 다른 언어, 환경 또는 서버에서 무언가를해야 할 때 훌륭한 솔루션입니다.

메시지 대기열이 많고 인 이 있지만, 나는 Gearman의 큰 팬입니다. 그것은 우리에게 memcached를 가져다 준 동일한 사람들에 의해 만들어졌습니다. PECL extension을 들여다보세요.