백엔드 개발 PHP 튜토리얼 PHP7_php 스킬의 성능을 두 배로 높이는 비결을 알려주세요

PHP7_php 스킬의 성능을 두 배로 높이는 비결을 알려주세요

May 16, 2016 pm 08:04 PM
php7 성능

20년 역사의 베테랑 웹 프로그래밍 언어인 PHP가 이르면 10월 말에 새로운 버전의 PHP 7을 출시할 예정입니다. 이는 10년 만의 대규모 개정판입니다. 이전 버전의 PHP 5보다 더 빠른 성능을 제공합니다. 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로 가져오기가 더욱 어렵습니다

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

Rasmus Lerdorf는 많은 자동차에서 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의 한 줄 프로그래밍 코드 "성장하는 프로젝트는 한 명의 개발자가 주도해서는 안 됩니다. 오래된 프로그램 코드는 새로운 프로그램 코드로 대체되어야 합니다. 그리고 그는 다른 개발자가 이를 목표로 삼아야 한다고 믿습니다."

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

다양한 Java 프레임워크의 성능 비교 다양한 Java 프레임워크의 성능 비교 Jun 05, 2024 pm 07:14 PM

다양한 Java 프레임워크의 성능 비교: REST API 요청 처리: Vert.x가 최고이며 요청 속도는 SpringBoot의 2배, Dropwizard의 3배입니다. 데이터베이스 쿼리: SpringBoot의 HibernateORM은 Vert.x 및 Dropwizard의 ORM보다 우수합니다. 캐싱 작업: Vert.x의 Hazelcast 클라이언트는 SpringBoot 및 Dropwizard의 캐싱 메커니즘보다 우수합니다. 적합한 프레임워크: 애플리케이션 요구 사항에 따라 선택하세요. Vert.x는 고성능 웹 서비스에 적합하고, SpringBoot는 데이터 집약적 애플리케이션에 적합하며, Dropwizard는 마이크로서비스 아키텍처에 적합합니다.

PHP 배열 키 값 뒤집기: 다양한 방법의 성능 비교 분석 PHP 배열 키 값 뒤집기: 다양한 방법의 성능 비교 분석 May 03, 2024 pm 09:03 PM

PHP 배열 키 값 뒤집기 방법의 성능 비교는 array_flip() 함수가 대규모 배열(100만 개 이상의 요소)에서 for 루프보다 더 나은 성능을 발휘하고 시간이 덜 걸리는 것을 보여줍니다. 키 값을 수동으로 뒤집는 for 루프 방식은 상대적으로 시간이 오래 걸립니다.

C++에서 멀티스레드 프로그램의 성능을 최적화하는 방법은 무엇입니까? C++에서 멀티스레드 프로그램의 성능을 최적화하는 방법은 무엇입니까? Jun 05, 2024 pm 02:04 PM

C++ 다중 스레드 성능을 최적화하기 위한 효과적인 기술에는 리소스 경합을 피하기 위해 스레드 수를 제한하는 것이 포함됩니다. 경합을 줄이려면 가벼운 뮤텍스 잠금을 사용하세요. 잠금 범위를 최적화하고 대기 시간을 최소화합니다. 동시성을 향상하려면 잠금 없는 데이터 구조를 사용하세요. 바쁜 대기를 피하고 이벤트를 통해 스레드에 리소스 가용성을 알립니다.

PHP 함수의 성능은 얼마나 되나요? PHP 함수의 성능은 얼마나 되나요? Apr 18, 2024 pm 06:45 PM

다양한 PHP 기능의 성능은 애플리케이션 효율성에 매우 중요합니다. 성능이 더 좋은 함수에는 echo 및 print가 포함되는 반면 str_replace, array_merge 및 file_get_contents와 같은 함수는 성능이 느립니다. 예를 들어, str_replace 함수는 문자열을 바꾸는 데 사용되며 보통의 성능을 갖는 반면 sprintf 함수는 문자열 형식을 지정하는 데 사용됩니다. 성능 분석에 따르면 하나의 예제를 실행하는 데 0.05밀리초밖에 걸리지 않아 함수가 잘 수행된다는 것을 증명합니다. 따라서 기능을 현명하게 사용하면 더 빠르고 효율적인 응용 프로그램을 만들 수 있습니다.

벤치마크를 사용하여 Java 기능의 성능을 평가하는 방법은 무엇입니까? 벤치마크를 사용하여 Java 기능의 성능을 평가하는 방법은 무엇입니까? Apr 19, 2024 pm 10:18 PM

Java 기능의 성능을 벤치마킹하는 방법은 JMH(Java Microbenchmark Suite)를 사용하는 것입니다. 구체적인 단계는 다음과 같습니다. 프로젝트에 JMH 종속성을 추가합니다. 새로운 Java 클래스를 생성하고 @State로 주석을 달아 벤치마크 메서드를 나타냅니다. 클래스에 벤치마크 방법을 작성하고 @Benchmark로 주석을 답니다. JMH 명령줄 도구를 사용하여 벤치마크를 실행합니다.

PHP 배열을 객체로 변환하면 성능에 어떤 영향이 있나요? PHP 배열을 객체로 변환하면 성능에 어떤 영향이 있나요? Apr 30, 2024 am 08:39 AM

PHP에서 배열을 객체로 변환하면 성능에 영향을 미치며, 이는 주로 배열 크기, 복잡성, 객체 클래스와 같은 요소의 영향을 받습니다. 성능을 최적화하려면 사용자 지정 반복기 사용, 불필요한 변환 방지, 배열 일괄 변환 및 기타 기술을 고려하세요.

시스템 재시작 후 UnixSocket의 권한을 자동으로 설정하는 방법은 무엇입니까? 시스템 재시작 후 UnixSocket의 권한을 자동으로 설정하는 방법은 무엇입니까? Mar 31, 2025 pm 11:54 PM

시스템이 다시 시작된 후 UnixSocket의 권한을 자동으로 설정하는 방법. 시스템이 다시 시작될 때마다 UnixSocket의 권한을 수정하려면 다음 명령을 실행해야합니다.

Java 프레임워크의 성능 비교 Java 프레임워크의 성능 비교 Jun 04, 2024 pm 03:56 PM

벤치마크에 따르면 소규모 고성능 애플리케이션의 경우 Quarkus(빠른 시작, 낮은 메모리) 또는 Micronaut(TechEmpower 우수)가 이상적인 선택입니다. SpringBoot는 대규모 풀 스택 애플리케이션에 적합하지만 시작 시간과 메모리 사용량이 약간 느립니다.

See all articles