>  기사  >  백엔드 개발  >  PHP 인터뷰 질문 1: 스레드와 프로세스의 차이점(그런데 코루틴이 언급됩니다)

PHP 인터뷰 질문 1: 스레드와 프로세스의 차이점(그런데 코루틴이 언급됩니다)

不言
不言원래의
2018-04-18 09:28:095833검색

이 글은 PHP 인터뷰 질문 1에서 스레드와 프로세스의 차이점을 소개합니다. (그런데 코루틴이 언급됩니다.) 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다. What A process


프로세스는 프로그램 실행의

인스턴스

입니다. 프로세스는 cpu 및 메모리와 같은 리소스에 할당될 수 있습니다. 프로세스에는 일반적으로 명령 세트 및 시스템 리소스가 포함됩니다. 여기서 명령 세트는 코드이고 시스템 리소스는 CPU, 메모리, I/O 등을 나타냅니다. 프로세스는 데이터 세트에 있는 프로그램의 동적 실행 프로세스입니다. 이는 간단히

"실행 프로그램"

으로 이해될 수 있습니다. 이는 CPU 리소스 할당 및 스케줄링의 독립적인 단위입니다. 프로세스는 일반적으로 프로그램, 데이터 세트, 프로세스 제어 블록
으로 구성됩니다. 우리가 작성하는 프로그램은 프로세스가 완료하는 데 필요한 기능과 이를 완료하는 방법을 설명하는 데 사용됩니다. 데이터 세트는 실행 중에 프로그램이 사용해야 하는 리소스입니다. 프로세스 제어 블록은 프로세스의 외부 특성을 기록하는 데 사용됩니다. , 프로세스의 실행 변경 프로세스를 설명하고, 시스템을 제어하고 관리하는 데 사용할 수 있습니다. 이는 시스템이 프로세스의 존재를 감지하는 유일한 신호입니다. 프로세스의 한계는 생성, 취소, 전환의 오버헤드가 상대적으로 높다는 것입니다.
2. 스레드란

스레드는 프로세스의 실행 흐름입니다. 스레드는 프로세스의 일부이며 프로세스와 독립적으로 실행되는 작은 단위입니다.

설명: 프로세스에는 두 가지 특성이 있습니다. 하나는 리소스 소유권이고 다른 하나는 실행 예약(명령어 세트)입니다. 스레드는 예약 실행의 일부이며 프로그램 실행 흐름이라고도 하는 프로세스 실행 경로를 나타냅니다. 스레드는 때때로 경량 프로세스라고도 합니다.


스레드는 프로세스 후에 개발된 개념입니다. 스레드는 경량 프로세스라고도 하며, CPU의 기본 실행 단위이자 프로그램 실행 프로세스의 최소 단위로 스레드 ID, 프로그램 카운터, 레지스터 세트, 스택으로 구성됩니다. 프로세스에는 여러 스레드가 포함될 수 있습니다.

스레드의 장점은 프로그램의 동시 실행에 따른 오버헤드를 줄이고 운영체제의 동시성 성능을 향상시킨다는 점입니다. 단점은 스레드가 자체 시스템 리소스를 갖지 않고 런타임 중에 꼭 필요한 리소스만 가지고 있다는 점입니다. 동일한 프로세스의 스레드는 프로세스가 소유한 시스템 리소스를 공유할 수 있습니다. 프로세스를 작업장에 비유하면 스레드는 작업장의 작업자와 같습니다. 그러나 일부 독점 리소스에는 잠금 메커니즘이 있으며 잘못 처리하면 "교착 상태"가 발생할 수 있습니다.

3. 코루틴이란? 코루틴은 마이크로 스레드라고도 하는 사용자 모드의 경량 스레드입니다. 코루틴의 일정은 사용자가 완전히 제어합니다. 사람들은 일반적으로 코루틴과 서브루틴
(함수)을 비교합니다.

서브루틴 호출에는 항상 시작이 있고 한 번 종료되면 서브루틴 실행이 완료됩니다.

코루틴의 시작은 첫 번째 진입점입니다. 코루틴에서는 반환점이 다음 진입점입니다. Python에서 코루틴은 항복을 통해 다른 코루틴을 호출할 수 있습니다. Yield 방식을 통해 실행권한을 넘겨주는 코루틴의 관계는 호출자와 피호출자의 관계가 아닌 대칭적이고 동등한 관계로 서로 협력하여 상호 협력을 통해 작업을 완료한다. 일반적인 작동 과정은 다음과 같습니다.

첫 번째 단계에서 코루틴 A가 실행되기 시작합니다.

두 번째 단계에서는 코루틴 A가 중간에 실행되고 일시정지에 들어갑니다. 실행 권한은 항복 명령을 통해 코루틴 B로 이전됩니다. 세 번째 단계: (일정 시간 후) 코루틴 B가 실행 권한을 반환합니다. 4단계: 코루틴 A가 실행을 재개합니다.

코루틴의 특징은 하나의 스레드에서 실행된다는 것입니다. 멀티스레딩에 비해 장점은 다음과 같습니다.
*
코루틴의
실행 효율성이 매우 높습니다
. 서브루틴 전환은 스레드 전환이 아니라 프로그램 자체에 의해 제어되므로 스레드 전환에 따른 오버헤드가 없습니다. 멀티스레딩에 비해 스레드 수가 많을수록 코루틴의 성능 이점은 더욱 분명해집니다.

* 코루틴에는 다중 스레드 잠금 메커니즘이 필요하지 않습니다. 코루틴에서 공유 리소스를 잠글 필요는 없습니다. 상태만 확인하면 됩니다.

팁: 멀티 코어 CPU를 사용하는 가장 간단한 방법은 멀티 프로세스 + 코루틴입니다. 이는 멀티 코어를 최대한 활용할 뿐만 아니라 코루틴의 높은 효율성을 최대한 활용하여 매우 높은 성능을 얻을 수 있습니다.
4. 프로세스와 스레드의 관계
프로세스는 토지(시스템 리소스)를 가진 집주인과 같고, 스레드는 임차인(스레드, 파밍 프로세스 실행)과 같습니다. 각 집주인(프로세스)에는 작업 중인 테넌트(스레드)가 하나만 필요합니다.
프로세스 - 리소스 할당의 가장 작은 단위이며 상대적으로 견고하며 충돌은 일반적으로 다른 프로세스에 영향을 미치지 않지만 프로세스 전환은 리소스를 소비하고 효율성이 떨어집니다.

스레드 - 프로그램 실행의 가장 작은 단위입니다. 독립적인 주소 공간이 없습니다. 하나의 스레드가 죽으면 전체 프로세스가 죽을 수 있지만 리소스를 절약하고 전환 효율성이 높습니다.

5. PHP 프로그래밍의 공통 프로세스 및 스레드

1. 웹 애플리케이션에서는 PHP에 액세스할 때마다 PHP 프로세스를 생성하고 물론 최소한 하나의 PHP 스레드도 생성합니다. 2. PHP는 다중 프로세스 프로그래밍을 위해
pcntl을 사용합니다. 3. PHP는 다중 스레드 프로그래밍을 위해
pthreads를 사용합니다. 4. nginx의
스레드는 프로세스당 하나만 있고 각 스레드는 여러 고객 클라이언트 액세스를 처리할 수 있습니다. 5. php-fpm은
다중 프로세스 모델 을 사용합니다. 각 프로세스 에는 하나의 스레드만 있고 각 스레드 는 하나의 클라이언트 액세스 만 처리할 수 있습니다. 6. Apache는 SAPI가 사용되는 모델에 따라 다중 프로세스 모델 또는 다중 스레딩 모델을 사용할 수 있습니다.
7. 프로세스는
cpu 리소스 할당의 가장 작은 단위이며, 스레드는 CPU 스케줄링

, 프로세스란 무엇입니까

프로세스는 프로그램 실행의

인스턴스입니다. 프로세스는 cpu 및 메모리와 같은 리소스에 할당될 수 있습니다. 프로세스에는 일반적으로 명령 세트 및 시스템 리소스가 포함됩니다. 여기서 명령 세트는 코드이고 시스템 리소스는 CPU, 메모리, I/O 등을 나타냅니다.

프로세스는 데이터 세트에 있는 프로그램의 동적 실행 프로세스입니다. 이는 간단히

"실행 프로그램"으로 이해될 수 있습니다. 이는 CPU 리소스 할당 및 스케줄링의 독립적인 단위입니다. 프로세스는 일반적으로
프로그램, 데이터 세트, 프로세스 제어 블록으로 구성됩니다. 우리가 작성하는 프로그램은 프로세스가 완료하는 데 필요한 기능과 이를 완료하는 방법을 설명하는 데 사용됩니다. 데이터 세트는 실행 중에 프로그램이 사용해야 하는 리소스입니다. 프로세스 제어 블록은 프로세스의 외부 특성을 기록하는 데 사용됩니다. , 프로세스의 실행 변경 프로세스를 설명하고, 시스템을 제어하고 관리하는 데 사용할 수 있습니다. 이는 시스템이 프로세스의 존재를 감지하는 유일한 신호입니다. 프로세스의 한계는 생성, 취소, 전환의 오버헤드가 상대적으로 높다는 것입니다.

2. 스레드란

스레드는 프로세스의 실행 흐름입니다. 스레드는 프로세스의 일부이며 프로세스와 독립적으로 실행되는 작은 단위입니다.

설명: 프로세스에는 두 가지 특성이 있습니다. 하나는 리소스 소유권이고 다른 하나는 실행 예약(명령어 세트)입니다. 스레드는 예약 실행의 일부이며 프로그램 실행 흐름이라고도 하는 프로세스 실행 경로를 나타냅니다. 스레드는 때때로 경량 프로세스라고도 합니다.

스레드는 프로세스 후에 개발된 개념입니다. 스레드는 경량 프로세스라고도 하며, CPU의 기본 실행 단위이자 프로그램 실행 프로세스의 최소 단위로 스레드 ID, 프로그램 카운터, 레지스터 세트, 스택으로 구성됩니다. 프로세스에는 여러 스레드가 포함될 수 있습니다.

스레드의 장점은 프로그램의 동시 실행에 따른 오버헤드를 줄이고 운영체제의 동시성 성능을 향상시킨다는 점입니다. 단점은 스레드가 자체 시스템 리소스를 갖지 않고 런타임 중에 꼭 필요한 리소스만 가지고 있다는 점입니다. 동일한 프로세스의 스레드는 프로세스가 소유한 시스템 리소스를 공유할 수 있습니다. 프로세스를 작업장에 비유하면 스레드는 작업장의 작업자와 같습니다. 그러나 일부 독점 리소스에는 잠금 메커니즘이 있으며 잘못 처리하면 "교착 상태"가 발생할 수 있습니다. 3. 코루틴이란? 코루틴은 마이크로 스레드라고도 하는 사용자 모드의 경량 스레드입니다. 코루틴의 일정은 사용자가 완전히 제어합니다. 사람들은 일반적으로
코루틴과 서브루틴

(함수)을 비교합니다.

서브루틴 호출에는 항상 시작이 있고 한 번 종료되면 서브루틴 실행이 완료됩니다.

코루틴의 시작은 첫 번째 진입점입니다. 코루틴에서는 반환점이 다음 진입점입니다. Python에서 코루틴은 항복을 통해 다른 코루틴을 호출할 수 있습니다. Yield 방식을 통해 실행권한을 넘겨주는 코루틴의 관계는 호출자와 피호출자의 관계가 아닌 대칭적이고 동등한 관계로 서로 협력하여 상호 협력을 통해 작업을 완료한다. 일반적인 작동 과정은 다음과 같습니다.

첫 번째 단계에서 코루틴 A가 실행되기 시작합니다. 두 번째 단계에서는 코루틴 A가 중간에 실행되고 일시정지에 들어갑니다. 실행 권한은 항복 명령을 통해 코루틴 B로 이전됩니다. 세 번째 단계: (일정 시간 후) 코루틴 B가 실행 권한을 반환합니다.
4단계: 코루틴 A가 실행을 재개합니다.

코루틴의 특징은 하나의 스레드에서 실행된다는 것입니다. 멀티스레딩에 비해 장점은 다음과 같습니다.
*
코루틴의
실행 효율성이 매우 높습니다

. 서브루틴 전환은 스레드 전환이 아니라 프로그램 자체에 의해 제어되므로 스레드 전환에 따른 오버헤드가 없습니다. 멀티스레딩에 비해 스레드 수가 많을수록 코루틴의 성능 이점은 더욱 분명해집니다.

* 코루틴에는 다중 스레드 잠금 메커니즘이 필요하지 않습니다. 코루틴에서 공유 리소스를 잠글 필요는 없습니다. 상태만 확인하면 됩니다.
팁: 멀티 코어 CPU를 사용하는 가장 간단한 방법은 멀티 프로세스 + 코루틴입니다. 이는 멀티 코어를 최대한 활용할 뿐만 아니라 코루틴의 높은 효율성을 최대한 활용하여 매우 높은 성능을 얻을 수 있습니다.

4. 프로세스와 스레드의 관계

프로세스는 토지(시스템 리소스)를 가진 집주인과 같고, 스레드는 임차인(스레드, 파밍 프로세스 실행)과 같습니다. 각 집주인(프로세스)에는 작업 중인 테넌트(스레드)가 하나만 필요합니다.
프로세스 - 리소스 할당의 가장 작은 단위이며 상대적으로 견고하며 충돌은 일반적으로 다른 프로세스에 영향을 미치지 않지만 프로세스 전환은 리소스를 소비하고 효율성이 떨어집니다.
스레드 - 프로그램 실행의 가장 작은 단위입니다. 독립적인 주소 공간이 없습니다. 하나의 스레드가 죽으면 전체 프로세스가 죽을 수 있지만 리소스를 절약하고 전환 효율성이 높습니다.

5. PHP 프로그래밍의 일반적인 프로세스 및 스레드

1. 웹 애플리케이션에서는 PHP에 액세스할 때마다 PHP 프로세스를 생성하고 물론 최소한 하나의 PHP 스레드도 생성합니다. 2. PHP는 다중 프로세스 프로그래밍을 위해
pcntl을 사용합니다. 3. PHP는 다중 스레드 프로그래밍을 위해
pthreads를 사용합니다. 4. nginx의
스레드는 프로세스당 하나만 있고 각 스레드는 여러 고객 클라이언트 액세스를 처리할 수 있습니다. 5. php-fpm은
다중 프로세스 모델 을 사용합니다. 각 프로세스 에는 하나의 스레드만 있고 각 스레드 는 하나의 클라이언트 액세스 만 처리할 수 있습니다. 6. Apache는 SAPI가 사용되는 방식에 따라 다중 프로세스 모델 또는 다중 스레딩 모델을 사용할 수 있습니다.
7. 프로세스는
cpu 리소스 할당의 최소 단위이고 스레드는 cpu 스케줄링의 최소 단위입니다.

관련 추천:

PHP 인터뷰에서 물어볼 수 있는 기술적인 질문 요약


위 내용은 PHP 인터뷰 질문 1: 스레드와 프로세스의 차이점(그런데 코루틴이 언급됩니다)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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