2010-08-15 4 views
4

나는이 비디오를 보았습니다 here, Robert Nicholson이 JVM에서 PHP를 구현 한 P8에 대해 설명합니다. 어떤 시점에서 그는 미래에 언젠가는 네이티브 PHP를 능가하는 것을 목표로한다고 언급합니다.자이 썬 (Jython)과 JRuby와 같은 JVM 구현체가 어떻게 네이티브 대응 제품을 이길 수 있습니까?

그는 JRuby와 Jython을 언급하는데, JRuby와 Jython은 본래의 것보다 느리게 시작되었지만 결국에는이를 능가했습니다. JVM에있는 또 다른 PHP 인터프리터 인 Quercus는 mod_php보다 4x faster이면서도 주목할 가치가 있다고 주장합니다.

JVM이 C보다 느리다는 일반적인 생각이 잘못되었거나 원래의 C 구현에 결함이 있습니까?

답변

8

JVM이 C보다 느리다는 일반적인 생각이 잘못되었거나 원래의 C 구현에 결함이 있습니까?

JVM이 오랜 시간 동안 주변되었습니다 및 효율성에 상당한 진전을 이루었습니다 모두

의 비트. 가비지 콜렉션, jitting, 캐싱 및 기타 영역은 PHP와 같은 '참조'구현보다 더 앞선다.

PHP의 두려운면을 살펴 본 사람이라면 왜 효율성 향상이 쉬운 지 이해할 수 있습니다.

이 너무는 JVM GC가 빠르다까지이며, IronPython을, 내가 ... 나는 JVM이 CPython의 그러나 을 능가 할 수 있다는 것을 개인적으로 의문입니다 ...하지만 내가 잘못 될 수 있습니다. 성능 향상은 스택없는 Python과 같이 C 호출 스택에 의존하지 않을 수 있습니다. The Jython site states

자이 썬은 CPython과 거의 비슷하게 빠르며 때로는 더 빠르거나 때로는 더 느립니다. > 대부분의 JVM은 장기간 실행되지만 가장 빠른 JVM은 초과 근무 시간이 더 빠를 것입니다. 내가 캐시가 생성 등 기본적으로 VM 구현 코드에 높은 수준의 측면을 (큰 일부가 어쨌든 C로 작성)

부정으로 C 성능 수준에 도달 할 JVM과 같은 사실로 appricate 수

PHP 및 Python과 같은 많은 해석 언어에서 해당 C 호출과 기계 코드로 다이빙하는 브리지 일뿐입니다. JVM에서 지터는 바이트 코드를 기계어 코드로 줄임으로써 유사한 기능을 수행합니다. 결과적으로 고급 구문 및 바이트 코드와 같은 중간 표현은 대개 C 속도 또는 더 빠른 CPU 작업으로 축소됩니다. 따라서 모든 것이 동일합니다. 더 많은 중간 단계 전체 효율성에 대한 대기 시간에만 영향을줍니다 새 코드를로드 할 때. RAM에는 "실제 차이점은 무엇입니까?"라고 한 지점이 있습니다. 대답은 스택 감기, 가비지 수집 알고리즘, 레지스터 사용 및 산술과 같은 논리 표현의 속도를 결정하는 최종 표현과 거기에있는 프로세스를 가져 오는 것입니다.

+1

[IronPython 2.0 및 Jython 2.5 vs Python 2.5] (http://www.smallshire.org.uk/sufficientlysmall/2009/05/22/ironpython-2-0-ko) 1 년 된 벤치 마크가 있습니다. and-jython-2-5-performance-to-python-2-5 /) 나는 더 최근의 것이 없다. – Aillyn

+1

@pessimopoppotamus - 걱정하지 마십시오. 답을 찾기 위해 조금 훑어보고 대답으로 수정하십시오. –

0

가상 컴퓨터가 수행하는 작업에 대한 몇 가지 힌트가 있습니다 here. 예를 들어, 자바 가상 머신 (Java Virtual Machine)은 먼저 바이트 코드의 어느 부분이 가장 자주 실행되는지 확인한 다음 관련 부분을 네이티브 코드 (컴파일 된 C 코드와 비슷한 속도로 실행해야 함)로 컴파일합니다.

PHP는 바이트 코드로 컴파일 되나요? 아니면 메모리 내 데이터 구조를 사용하여 해석되는 것입니까? PHP를 Java 가상 머신이 실행 가능한 바이트 코드로 먼저 변환함으로써, 기존의 (언어에 구애받지 않는) 바이트 코드 실행의 최적화로부터 자동으로 이득을 얻습니다.

1

너무 어렵지 않습니다. C로 구현을 작성하는 경우 자신의 GC, JIT 등을 작성해야합니다 (빠르고 효율적입니다). 정말 좋은 일을하려면 많은 경험을 가진 현명한 사람들이 필요하며 많은 시간을 주어야합니다.

필자는 사지에 서서 PHP의 현재 구현 (내적 작업에 대한 지식이 아니라 PHP에 대해 더 많이 알고있는 사람들이 본 벤치 마크에 기반한다고 말했습니다.)는 최첨단이 아닙니다. 페이스 북은이 문제를 해결하려고 노력하지만, 특별한 필요와 PHP의 일반적인 사용이 있기 때문에 드문 방식으로 수행한다 (http://www.stanford.edu/class/ee380/Abstracts/100505.html 참조).

요약 : 누군가가 자바에서 PHP를 구현 그래서 경우 (또는 빠른 VM에) 그가 빨리 될 수있는 슈퍼 GC 또는 JIT "전용"컴파일러를 (단순 할 수있는) 쓸 필요가 없습니다.