프로세스: 협의적으로 프로세스는 실행 중인 프로그램의 인스턴스입니다. 넓은 의미에서 프로세스는 특정 데이터 컬렉션에 대한 특정 독립적인 기능을 가진 프로그램의 실행 활동입니다. (추천 학습: PHP 프로그래밍 입문부터 숙련까지)
운영 체제의 동적 실행의 기본 단위입니다. 전통적인 운영 체제에서는 프로세스가 기본 할당 단위이자 기본 실행 단위입니다. (몇 단어로 요약: 활성, 엔터티, 실행 중인 프로그램)
스레드: 프로그램 실행 흐름의 가장 작은 단위인 경량 프로세스라고 합니다. 시스템은 스케줄링 및 파견의 기본 단위입니다.
스레드 자체는 기본적으로 시스템 리소스를 소유하지 않으며 작업에 필수적인 일부 리소스(예: 프로그램 카운터, 레지스터 집합 및 스택)만 소유하지만 프로세스가 소유한 리소스를 다른 프로세스와 공유할 수 있습니다. 동일한 프로세스에 속하는 모든 리소스(몇 단어로 요약: 경량, 엔터티, 프로세스, 최소 단위)
차이:
0) 프로세스는 CPU 리소스 할당의 가장 작은 단위이며 스레드는 CPU 스케줄링의 가장 작은 단위
1) 간단히 말해서 프로그램에는 하나 이상의 프로세스가 있고, 프로세스에는 하나 이상의 스레드가 있습니다.
2) 스레드의 분할 규모는 프로세스의 분할 규모보다 작으므로 멀티 스레드가 됩니다. 프로그램의 동시성이 높습니다.
3) 또한 프로세스는 실행 중에 독립된 메모리 단위를 가지며 여러 스레드가 메모리를 공유하므로 프로그램의 실행 효율성이 크게 향상됩니다.
4) 실행 시 스레드와 프로세스에는 차이가 있습니다. 각각의 독립 스레드에는 프로그램 실행을 위한 진입점, 순차적 실행 시퀀스 및 프로그램 종료점이 있습니다. 그러나 스레드는 독립적으로 실행될 수 없으며 응용 프로그램 내에 존재해야 하며 응용 프로그램은 다중 스레드 실행 제어를 제공합니다.
5) 논리적인 관점에서 볼 때 멀티스레딩의 의미는 애플리케이션에서 여러 실행 부분을 동시에 실행할 수 있다는 것입니다. 그러나 운영 체제는 프로세스 스케줄링 및 관리, 자원 할당을 구현하기 위해 다중 스레드를 다중 독립 응용 프로그램으로 간주하지 않습니다. 이것이 프로세스와 스레드의 중요한 차이점입니다.
PHP의 다양한 동시성 모델
두 가지 모델이 있는데 PHP는 어떤 모델을 사용하나요?
답은 둘 다 지원한다는 것입니다. 즉, PHP는 멀티스레딩 모델을 지원하므로 일반적으로 리소스 공유 및 격리 문제를 해결해야 합니다. PHP 자체는 스레드로부터 안전합니다. 구체적으로 모델은 어떤 SAPI가 사용되는지에 따라 다릅니다. 예를 들어 Apache에서는 다중 스레드 모델 또는 다중 프로세스 모델이 사용될 수 있습니다. 그리고 php-fpm은 다중 프로세스 모델을 사용합니다.
현재 권장되는 방법은 php-fpm 모델을 사용하는 것입니다. 이 모델은 PHP에 많은 장점이 있기 때문입니다.
1 메모리 해제가 간단하고 다중 프로세스 모델을 사용할 때 프로세스를 쉽게 종료할 수 있습니다. . 메모리 해제 PHP에는 확장 기능이 많기 때문에 주의하지 않으면 FPM이 프로세스를 종료하는 것만으로 문제를 해결할 수 있습니다.
2. 강력한 재해 복구 기능. 동일한 문제의 경우 확장 프로그램이나 PHP가 단일 프로세스 다중 스레드 모델인 경우 전체 PHP가 중단될 수 있습니다. 이는 서비스에 영향을 미치게 되며, 특정 프로세스가 종료되어도 전체 서비스에는 영향을 미치지 않습니다.
다중 프로세스에는 다중 프로세스의 장점이 있고, 멀티스레딩에도 멀티스레딩의 장점이 있습니다. 예를 들어 HHVM은 멀티스레딩 모델을 선택합니다. 멀티스레딩 모델의 가장 큰 장점은 동일한 프로세스 공간에서 포인터를 직접 사용할 수 있어 정보 공유 및 통신이 편리하다는 점이다.
예를 들어, PHP, apc, opcache 등에서는 공유 메모리를 사용하여 공유 메모리를 사용할 필요가 없습니다. 데이터 구조 포인터 문제로 인해 C/C++의 데이터 구조는 멀티스레드 상황에서 공유될 수 있어 편리합니다. 이는 효율성 향상에도 도움이 됩니다.
멀티 프로세싱과 멀티 스레딩 사이에는 또 다른 분명한 모델 차이가 있습니다. 바로 요청을 처리할 때의 논리입니다.
멀티 프로세스의 경우 프로세스 간에 FD 연결을 전달하기가 어렵습니다. 많은 프로세스가 일반적으로 상위 프로세스에서 listening()을 사용하고 로드 밸런싱을 달성하기 위해 각 하위 프로세스에서 accept()를 사용합니다. 그러한 모델에서는 무리 문제가 발생할 수 있습니다.
멀티 스레딩 모델에서는 독립 스레드를 사용하여 요청을 수락한 다음 이를 각 작업자 스레드에 전달할 수 있습니다.
위 내용은 PHP 프로세스와 스레드의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!