>  기사  >  백엔드 개발  >  PHP7 성능을 두 배로 높이는 열쇠 공개

PHP7 성능을 두 배로 높이는 열쇠 공개

coldplay.xixi
coldplay.xixi앞으로
2020-06-24 17:31:582462검색

PHP7 성능을 두 배로 높이는 열쇠 공개

지난 20년 동안 수많은 수정과 셀 수 없이 많은 최적화를 거친 성숙한 언어의 경우, 성능을 두 배로 늘리는 돌파구를 찾는 것이 쉽지 않다는 점을 Rasmus Lerdorf는 인정합니다. 개선의 여지가 많이 있지만 새 버전의 PHP에서는 일부 프로그램을 수정하여 이러한 결과를 얻을 수 없습니다.

20년 역사의 베테랑 웹 프로그래밍 언어 PHP가 이르면 10년 만에 새로운 버전의 PHP 7을 출시할 예정입니다. 이는 이전 버전의 PHP 5보다 빠릅니다. PHP의 아버지 Rasmus Lerdorf에 따르면 Double은 HHVM 가상 머신에서 PHP 프로그램의 성능보다 훨씬 빠릅니다.


지난 20년 동안 수많은 수정과 수많은 최적화를 거친 성숙한 언어의 경우 성능을 두 배로 늘리는 돌파구를 찾는 것이 쉽지 않다고 Rasmus Lerdorf는 인정합니다. 대부분의 새로운 프로젝트에서는 개선의 여지가 많습니다. 새 버전의 PHP에서는 일부 프로그램을 수정해도 이러한 결과를 얻을 수 없습니다. 이에 반해 수많은 세부 최적화와 성능 축적을 거쳐 PHP 7은 HHVM에 뒤지지 않는 실행 성능을 갖고 있다.

Rasmus Lerdorf와 PHP 코어 기여팀은 프로그램 실행 시 이동되는 메모리 비트 수를 줄여 실행 성능을 높이기 위해 많은 노력을 기울였습니다. 예를 들어, PHP에서 변수를 저장하는 데이터 구조 zval은 24비트에서 16비트로 줄어들고, Hashtable은 72비트에서 56비트로 줄어들어 성능 개선의 여지가 있는지 검토합니다.

Rasmus Lerdorf는 메모리 사용량을 줄이는 것 외에도 프로그램 코드가 CPU와 상호 작용하는 방식, 컴파일러가 새 CPU 아키텍처에서 프로그램 코드를 컴파일하는 방식 및 기타 세부 사항을 이해하기 위해 CPU 캐시 라인의 작동 원리를 조사했습니다. PHP 7 프로그램의 코드는 최신 CPU 아키텍처를 따릅니다. 각 프로젝트의 최적화가 성능에 기여하는 바는 0.5% 미만이지만, 최적화 프로젝트가 많거나 특정 개선된 기능이 애플리케이션에서 반복적으로 호출되기 때문에 전체적인 수정 효과는 이렇게 큰 향상이 될 수 있습니다.

HHVM에서 영감을 받아 성능과 기능을 모두 갖춘 PHP를 만들기로 결정했습니다.

PHP 작업을 최적화하기 위해 Facebook은 JIT 컴파일을 사용하여 가상 머신 HHVM을 만들었습니다. HHVM은 빠른 실행 성능을 가지고 있지만 특정 목적에 최적화된 설계는 소수의 개발자만을 만족시킬 수 있습니다. 반대로 Rasmus Lerdorf는 PHP의 성능을 향상시키는 것 외에도 고급 사용자와 아마추어 사용자의 요구를 동시에 충족하여 PHP 7을 성능과 일반 기능을 모두 갖춘 프로그래밍 언어로 만들고자 합니다.

그러나 시장에서 소수의 요구를 충족하는 프로그래밍 언어를 개발하는 것은 어렵지 않습니다. 그러나 PHP 프로젝트는 많은 대상을 목표로 하며 아마추어 사용자와 전문 개발자의 요구를 동시에 충족해야 합니다. 개발은 항상 있기 때문에 모든 것을 포괄하기 어렵습니다. 일부 그룹의 요구를 충족할 수 없습니다. "마치 넓은 지역에 수도관을 뿌리는 것과 같습니다. 모든 사람의 옷이 약간 젖을 수 있지만 어느 누구도 옷이 완전히 젖지는 않습니다. ." Rasmus Lerdorf가 말했습니다.

외부 프레임워크를 사용하지 않는 PHP의 컴퓨팅 성능은 매우 좋습니다. 그러나 외부 프레임워크의 영향으로 인해 원래 수천 개의 웹 페이지 요청을 몇 초 안에 처리할 수 있었던 PHP는 상당한 성능 저하를 가져오며, 수십 개의 요청을 처리합니다. Rasmus Lerdorf는 HHVM이 등장하기 전에 사용자들은 PHP가 PHP의 성능 요구 사항보다 웹 개발의 어려움을 줄일 수 있는지 여부에 대해 더 관심을 가졌고 이러한 프레임워크가 개발자의 작업을 더 쉽게 만들 수 있다고 말했습니다. 그러나 Facebook이 HHVM을 출시한 후 PHP 성능을 중시하는 많은 사용자가 관심을 끌면서 Rasmus Lerdorf는 많은 사용자에게 성능 요구 사항이 있음을 깨닫게 되었습니다. 그는 HHVM의 JIT 아키텍처를 PHP와 통합하는 방법에 대해 생각하기 시작했습니다.

그러나 Rasmus Lerdorf는 PHP와 HHVM은 아키텍처 설계가 상당히 다르다고 말했습니다. 예를 들어 HHVM의 멀티 스레드 아키텍처는 그다지 안정적이지 않습니다. 게다가, HHVM은 이식성이 좋지 않고, Windows 플랫폼에서 실행되기에는 아직 멀었습니다. PHP는 Windows 환경에서 개발하는 개발자가 많아 HHVM이 이러한 사용자를 처리할 수 없습니다.

Rasmus Lerdorf는 PHP의 주요 아키텍처를 포기할 수 없다고 말했습니다. 두 아키텍처를 통합하는 것을 고려했지만 HHVM은 사용에 많은 제한이 있습니다. HHVM은 Facebook과 많은 개발자에게 매우 좋은 도구이지만 PHP 프로젝트의 경우 HHVM의 사용 범위가 충분히 넓지 않으며 Facebook이나 Wikipedia와 같은 특정 프로젝트의 요구 사항만 충족할 수 있습니다.

강력한 형식의 언어가 아닌 PHP에서는 JIT를 가져오기가 더욱 어렵습니다

그러나 PHP에 JIT 컴파일을 추가하는 것은 매우 어렵습니다. Rasmus Lerdorf는 JIT가 어떤 부분이 중요한 프로그램 코드인지 이해하고, 프로그램이 언제 호출될지 또는 프로그램이 실행되기 전에 프로그램의 어떤 부분이 호출될지 예측하는 등 프로그램의 작동 패턴(패턴)을 식별하는 방법을 배워야 한다고 말했습니다. 달리다.

Rasmus Lerdorf는 많은 자동차에서 JIT가 자동차의 어느 부분이 우회전할지, 자동차의 어느 부분이 좌회전할지, 특정 색상의 어떤 자동차가 직진할지 예측할 수 있어야 한다고 말했습니다. "그리고 JIT는 모든 것을 예측해야 합니다. 그렇지 않으면 성능이 크게 저하됩니다. "그러나 예측이 정확하면 프로그램 실행 성능이 크게 향상됩니다.

일반 프로그래밍 언어의 컴파일에 JIT를 추가하는 것은 쉽지 않습니다. Rasmus Lerdorf는 PHP의 동적 특성으로 인해 JIT를 추가하는 것이 더욱 어렵다고 말했습니다. 예를 들어 개발자가 매개변수 $a의 값을 1로 선언했지만, 매개변수 값은 PHP에서 쉽게 재정의할 수 있기 때문에 프로그램의 모든 $a의 값이 1이라는 의미는 아니라고 말했습니다. C 언어에서 개발자가 매개변수 a를 정수로 선언하면 a는 항상 정수가 됩니다. 프로그램의 어느 부분에서 a가 정수가 아닌 유형이라고 선언되면 컴파일조차 불가능합니다. 그리고 C 언어는 강력한 형식의 프로그래밍 언어이기 때문에 "JIT는 변수 a가 정수라고 예측할 수 있지만 PHP에서는 이러한 여유가 없습니다."라고 그는 설명했습니다. type 이후에는 a는 항상 정수라고 가정합니다.

JIT 컴파일을 사용하기 위해 HHVM에서는 PHP 개발을 어느 정도 제한했습니다. HHVM 사용자는 변수의 성격을 명확하게 선언해야 하지만, PHP를 사용하는 개발자는 먼저 성격 없이 카테고리(클래스)를 선언한 후 클래스의 변수 속성을 지정할 수 있습니다. "어떤 제한도 없이 JIT를 PHP에 추가하는 것이 우리가 해야 할 일입니다." 그는 PHP가 WordPress, Drupal 및 기타 프레임워크의 개발자를 고려해야 하며 이러한 프레임워크 지원을 임의로 중단할 수 없다고 말했습니다. 따라서 HHVM과 비교하여 PHP는 JIT 구축에 더 많은 제한이 있습니다.

그러나 이것이 우리가 JIT를 할 수 없다는 의미는 아닙니다. 또한, Rasmus Lerdorf는 PHP의 개발 방향도 제어해야 한다고 말했습니다.

현재 PHP의 핵심 기여자 중 한 명인 Dmitry Stogov는 프로토타입 JIT를 개발하고 일부 실험적인 애플리케이션을 사용하여 작동을 테스트하고 있습니다. Rasmus Lerdorf는 이 JIT를 사용하여 특정 반복 작업이나 루프 프로그램을 수행하면 PHP 7의 성능이 10배 빨라질 수 있다고 말했습니다.

그러나 그는 이 실험적인 JIT를 워드프레스에서 사용했을 때 어떤 가속 효과도 얻지 못했다고 인정했습니다. "우리가 만들고 싶은 JIT는 대학 교과서에서 배운 것이 아니라 현실 세계에서 작동할 수 있는 것입니다. "JIT." 그가 말했다. PHP는 교과서의 이론이 아닌 사람들의 삶의 문제를 해결하고 실제 온라인 환경에서 작동하도록 항상 이러한 이상을 가지고 있었기 때문입니다.

Rasmus Lerdorf는 PHP가 처음 나왔을 때 하루에 최소 16시간을 PHP 개발에 투자했다고 말했습니다. 그러나 이제 그는 점차 개발에 대한 투자를 줄이고 대신 전 세계를 대상으로 홍보와 연설에 힘을 쏟고 있습니다. 그는 농담조로 이렇게 말했습니다. "직접 개발하는 것보다 나보다 훨씬 똑똑하고 하루에 18시간을 들여 PHP 개발 프로그램을 작성하려는 사람들에게 영감을 주는 것이 더 낫습니다." 그가 작성한 PHP의 한 줄. "성장하는 프로젝트는 한 명의 개발자가 주도해서는 안 됩니다. 오래된 프로그램 코드는 새로운 프로그램 코드로 대체되어야 합니다. 그리고 그는 다른 개발자가 이를 목표로 삼아야 한다고 믿습니다."

추천 튜토리얼: "php 비디오 튜토리얼"

위 내용은 PHP7 성능을 두 배로 높이는 열쇠 공개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제

관련 기사

더보기