>  기사  >  백엔드 개발  >  PHP7의 성능을 두 배로 높이는 비결에 대한 자세한 설명

PHP7의 성능을 두 배로 높이는 비결에 대한 자세한 설명

*文
*文원래의
2018-01-05 13:14:441742검색

이 글은 PHP7의 성능을 두 배로 높이는 비결을 이해하는 데 도움이 되는 관련 정보를 주로 소개합니다. 도움이 필요한 친구들이 참고할 수 있습니다. 그것이 모두에게 도움이 되기를 바랍니다.

PHP 7은 10년만의 대규모 개정판입니다. 가장 큰 특징은 이전 버전의 PHP 5보다 2배 빠른 속도를 낼 수 있다는 것입니다. PHP의 아버지인 Rasmus Lerdorf는 속도가 훨씬 빨라졌다고 말했습니다. HHVM 가상 머신에서는 PHP보다 프로그램 성능이 빠릅니다.

HHVM은 Facebook이 자체 웹사이트 특성에 맞게 맞춤화한 PHP 최적화 메커니즘으로, 어떤 웹사이트에도 적용되지 않을 수 있습니다. 그러나 Rasmus Lerdorf는 새 버전의 목표 중 하나는 모든 웹 사이트 개발자가 개발 프레임워크인 Drupal과 오픈 소스 전자 상거래 시스템인 Opencart를 사용하더라도 HHVM 기술을 사용하는 것과 동일한 성능을 갖도록 하는 것이라고 말했습니다. 새 버전 출시 전날 그는 대만에 와서 PHPConf 대만 연례 컨퍼런스에 참석하여 PHP 7의 성능 혁신의 열쇠를 공유할 기회도 얻었습니다.

지난 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를 할 수 없다는 것을 의미하지 않습니다. 또한, 우리는 PHP의 개발 방향도 통제해야 합니다."라고 Rasmus Lerdorf는 말했습니다.

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

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

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

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.