찾다
백엔드 개발PHP 튜토리얼PHP 스레드 프로세스 및 동시 인스턴스에 대한 자세한 설명


프로세스

프로세스란 무엇인가요? 프로세스는 실행 중인 프로그램이고, 프로세스는 컴퓨터에서 실행되는 프로그램의 인스턴스입니다. 프로세스는 프로세서에 할당되어 실행될 수 있습니다. 프로세스에는 일반적으로 명령어 세트와 시스템 리소스 세트가 포함됩니다. 여기서 명령어 세트는 프로그램 코드를 의미하고, 시스템 리소스 세트는 I/O, CPU, 메모리 등을 의미합니다. 요약하자면, 프로세스는 특정 데이터 수집에 대한 특정 독립적 기능을 가진 프로그램의 실행 활동이라는 것도 이해할 수 있습니다. 프로세스는 시스템의 리소스 할당 및 스케줄링을 위한 독립적인 단위입니다.

프로세스가 실행되면 프로세스는 다음 요소로 구성되어 고유하게 표현될 수 있습니다.

  • 프로세스 설명자: 다른 프로세스와 구별하는 데 사용되는 프로세스의 고유 식별자입니다. Linux에서는 프로세스 ID라고 하며 시스템 호출 분기 중에 생성됩니다. 그러나 getpid를 통해 반환되는 것은 pid 필드가 아니라 스레드 그룹 번호 tgid입니다.

  • 프로세스 상태: 우리가 종종 일시 중지, 실행 중 등이라고 부르는 상태는 현재 상태를 나타냅니다.

  • 우선순위: 다른 프로세스에 비해 프로세스 간 실행 일정과 관련됩니다.

  • 프로그램 카운터: 프로그램에서 실행될 다음 명령어의 주소입니다. 이 주소는 커널 또는 사용자 메모리 공간의 메모리 주소입니다.

  • 메모리 포인터: 프로그램 코드 및 프로세스 관련 데이터에 대한 포인터는 물론 다른 프로세스와의 공유 메모리 블록에 대한 포인터도 포함됩니다.

  • 컨텍스트 데이터: 프로세스가 실행될 때 프로세서 레지스터의 데이터입니다.

  • I/O 상태 정보: 명시적인 I/O 요청, 프로세스에 할당된 I/O 장치 등을 포함합니다.

  • 계정 정보: 총 프로세서 시간, 사용된 총 클럭 수 및 시간이 포함될 수 있습니다. 제한 사항 등

위 요소는 프로세스 제어 블록이라는 데이터 구조에 배치됩니다. 프로세스 제어 블록은 운영체제가 다중 프로세스를 지원하고 다중 프로세싱을 제공할 수 있도록 하는 구조이다. 운영 체제가 프로세스를 전환할 때 두 단계를 수행합니다. 하나는 현재 프로세서의 프로세스를 중단하고 다른 하나는 다음 프로세스를 실행하는 것입니다. 인터럽트 또는 실행에 관계없이 프로세스 제어 블록의 프로그램 카운터, 컨텍스트 데이터 및 프로세스 상태가 변경됩니다. 프로세스가 중단되면 운영 체제는 프로그램 카운터와 프로세서 레지스터(프로세스 제어 블록의 컨텍스트 데이터에 해당)를 프로세스 제어 블록의 해당 위치에 저장하고 프로세스 상태도 변경될 수 있습니다. 차단 상태 또는 차단 상태로 들어갈 수 있습니다. 다음 프로세스가 실행되면 운영체제는 규칙에 따라 다음 프로세스를 실행 상태로 설정하고, 실행될 프로세스의 프로그램 컨텍스트 데이터와 프로그램 카운터를 로드한다.

Threads

프로세스에는 리소스 소유권과 예약 실행이라는 두 가지 특징적인 부분이 있습니다. 리소스 소유권은 프로세스가 프로세스를 실행하는 데 필요한 메모리 공간, I/O 및 기타 리소스를 포함한다는 것을 의미합니다. 스케줄링 실행은 프로세스 실행 도중의 실행 경로 또는 프로그램의 명령 실행 흐름을 의미합니다. 이 두 기능 부분은 분리될 수 있습니다. 분리 후 데이터 소유권이 있는 부분을 일반적으로 프로세스라고 하며, 실행 코드 중 디스패치 가능한 부분이 있는 부분을 스레드 또는 경량 프로세스라고 합니다.

스레드는 "실행 단서"라는 의미를 가지며 프로세스는 멀티 스레드 환경에서 리소스 소유자로 정의되며 프로세스의 프로세스 제어 블록을 계속 저장합니다. 스레드의 구조는 프로세스의 구조와 다릅니다. 각 스레드에는 다음이 포함됩니다.

  • 스레드 상태: 스레드의 현재 상태입니다.

  • 실행 스택

  • 개인 데이터 영역: 각 스레드의 지역 변수를 위한 정적 저장 공간

  • 레지스터 세트: 프로세서의 일부 상태를 저장합니다

각 프로세스에는 프로세스 제어 블록과 사용자 주소 공간이 있고, 각 스레드에는 독립적인 스택과 독립적인 제어 블록이 있으며, 각 스레드에는 자체적인 독립적인 실행 컨텍스트가 있습니다. 그 구조는 그림 8.1에 나와 있습니다.

PHP 스레드 프로세스 및 동시 인스턴스에 대한 자세한 설명

그림 8.1 프로세스 모델 다이어그램

스레드는 실행 중인 프로세스와 다소 다릅니다. 각각의 독립 스레드에는 프로그램 실행을 위한 진입점, 순차적 실행 시퀀스 및 프로그램 종료점이 있습니다. 그러나 스레드는 독립적으로 실행될 수 없으며 프로세스 내에 존재해야 하며 프로세스는 다중 스레드 실행 제어를 제공합니다. 논리적인 관점에서 볼 때 멀티스레딩의 의미는 프로세스에서 여러 실행 부분을 동시에 실행할 수 있다는 것입니다. 이때 프로세스 자체는 기본 실행 단위가 아니라 스레드의 컨테이너입니다.

프로세스에 비해 스레드의 장점은 새 스레드를 생성하든, 스레드를 종료하든, 스레드 간 데이터 공유나 통신을 수행하든 그보다 속도가 더 크다는 것입니다. 프로세스.


동시성 및 병렬성

공존이라고도 하는 동시성은 여러 동시 활동을 처리하는 기능을 의미하며 반드시 동시에 발생할 필요는 없습니다. 예를 들어, 최신 컴퓨터 시스템은 동시에 여러 프로그램을 프로세스 형태로 메모리에 로드할 수 있으며, 프로세서의 시분할 다중화를 사용하여 하나의 프로세서에서 동시에 실행되는 듯한 느낌을 줍니다.

병렬은 동시에 발생하는 두 개의 이벤트를 말하며 동시성이라는 의미를 가지지만, 동시성이 반드시 병렬성을 의미하는 것은 아닙니다.

동시성과 병렬성의 차이점은 하나의 프로세서가 여러 작업을 동시에 처리하고 여러 프로세서 또는 멀티 코어 프로세서가 여러 다른 작업을 동시에 처리한다는 것입니다. 전자는 논리적 동시성이라면 후자는 물리적 동시성이다.

PHP의 다양한 동시성 모델

두 가지 모델이 있는데 PHP는 어떤 모델을 사용하나요? 대답은 모두 지원된다는 것입니다. 이는 PHP가 다중 스레드 모델을 지원한다는 것을 의미합니다. 다중 스레드 상황에서는 일반적으로 리소스 공유 및 격리 문제를 해결해야 합니다. PHP 자체는 스레드로부터 안전합니다.

특정 모델은 어떤 SAPI가 사용되는지에 따라 다릅니다. 예를 들어 Apache에서는 다중 스레드 모델 또는 다중 프로세스 모델이 사용될 수 있습니다. 그리고 php-fpm은 다중 프로세스 모델을 사용합니다.

현재 권장되는 방법은 php-fpm 모델을 사용하는 것입니다. 이 모델은 PHP에 많은 장점을 갖고 있기 때문입니다.

  1. 메모리 해제가 간단하고, 다중 프로세스 모델을 사용할 때 프로세스를 쉽게 해제할 수 있습니다. 메모리 종료, PHP에는 많은 확장이 있기 때문에 약간의 부주의로 인해 메모리 누수가 발생할 수 있습니다. FPM은 프로세스 종료를 통해 폭력을 제거하여 문제를 해결합니다.

  2. 강력한 재해 복구 기능. 동일한 문제의 경우 확장 프로그램이나 PHP로 인해 분할 오류가 발생할 수 있습니다. 단일 프로세스 다중 스레드 모델인 경우 전체 PHP가 중단됩니다. 이는 서비스에 영향을 미칩니다. 여러 프로세스가 있는 경우 특정 프로세스가 종료되어도 전체 서비스에는 영향을 미치지 않습니다.

다중 프로세스에는 다중 프로세스의 장점이 있고, 멀티스레딩에도 멀티스레딩의 장점이 있습니다. 예를 들어 HHVM은 멀티스레딩 모델을 선택합니다. 멀티스레딩 모델의 가장 큰 장점은 동일한 프로세스 공간에서 포인터를 직접 사용할 수 있어 정보 공유 및 통신이 편리하다는 점이다.

예를 들어, PHP에서는 apc, opcache 등이 공유 메모리를 사용하여 opcode를 공유합니다. HHVM에서는 공유 메모리를 사용할 필요가 없습니다. 복잡한 데이터 구조, 포인터 문제로 인해 C/C++의 데이터 구조는 멀티스레드 상황에서 공유될 수 있습니다. 이는 효율성 향상에도 도움이 됩니다.

멀티 프로세싱과 멀티 스레딩 사이에는 또 다른 명백한 모델 차이가 있습니다. 바로 요청을 처리할 때의 논리입니다.

멀티 프로세스의 경우 프로세스 간에 FD 연결을 전달하기가 어렵습니다. 일반적으로 많은 프로세스가 상위 프로세스에서 로드 밸런싱을 구현합니다. 그러한 모델에서는 무리 문제가 발생할 수 있습니다. listen(), 然后各个子进程accept()

멀티 스레딩 모델에서는 독립 스레드를 사용하여 요청을 수락한 다음 이를 각 작업자 스레드에 전달할 수 있습니다.

관련 권장 사항:

단일 스레드 JS 실행 문제에 대한 자세한 설명

PHP의 멀티 스레드 프로그래밍 지원 및

을 사용하여 PHP 멀티 스레드 클래스를 구현하는 사례

위 내용은 PHP 스레드 프로세스 및 동시 인스턴스에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

여전히 인기있는 것은 사용 편의성, 유연성 및 강력한 생태계입니다. 1) 사용 편의성과 간단한 구문은 초보자에게 첫 번째 선택입니다. 2) 웹 개발, HTTP 요청 및 데이터베이스와의 우수한 상호 작용과 밀접하게 통합되었습니다. 3) 거대한 생태계는 풍부한 도구와 라이브러리를 제공합니다. 4) 활성 커뮤니티와 오픈 소스 자연은 새로운 요구와 기술 동향에 맞게 조정됩니다.

PHP 및 Python : 유사점과 차이점을 탐구합니다PHP 및 Python : 유사점과 차이점을 탐구합니다Apr 19, 2025 am 12:21 AM

PHP와 Python은 웹 개발, 데이터 처리 및 자동화 작업에 널리 사용되는 고급 프로그래밍 언어입니다. 1.PHP는 종종 동적 웹 사이트 및 컨텐츠 관리 시스템을 구축하는 데 사용되며 Python은 종종 웹 프레임 워크 및 데이터 과학을 구축하는 데 사용됩니다. 2.PHP는 Echo를 사용하여 콘텐츠를 출력하고 Python은 인쇄를 사용합니다. 3. 객체 지향 프로그래밍을 지원하지만 구문과 키워드는 다릅니다. 4. PHP는 약한 유형 변환을 지원하는 반면, 파이썬은 더 엄격합니다. 5. PHP 성능 최적화에는 Opcache 및 비동기 프로그래밍 사용이 포함되며 Python은 Cprofile 및 비동기 프로그래밍을 사용합니다.

PHP와 Python : 다른 패러다임이 설명되었습니다PHP와 Python : 다른 패러다임이 설명되었습니다Apr 18, 2025 am 12:26 AM

PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

PHP와 Python : 그들의 역사에 깊은 다이빙PHP와 Python : 그들의 역사에 깊은 다이빙Apr 18, 2025 am 12:25 AM

PHP는 1994 년에 시작되었으며 Rasmuslerdorf에 의해 개발되었습니다. 원래 웹 사이트 방문자를 추적하는 데 사용되었으며 점차 서버 측 스크립팅 언어로 진화했으며 웹 개발에 널리 사용되었습니다. Python은 1980 년대 후반 Guidovan Rossum에 의해 개발되었으며 1991 년에 처음 출시되었습니다. 코드 가독성과 단순성을 강조하며 과학 컴퓨팅, 데이터 분석 및 기타 분야에 적합합니다.

PHP와 Python 중에서 선택 : 가이드PHP와 Python 중에서 선택 : 가이드Apr 18, 2025 am 12:24 AM

PHP는 웹 개발 및 빠른 프로토 타이핑에 적합하며 Python은 데이터 과학 및 기계 학습에 적합합니다. 1.PHP는 간단한 구문과 함께 동적 웹 개발에 사용되며 빠른 개발에 적합합니다. 2. Python은 간결한 구문을 가지고 있으며 여러 분야에 적합하며 강력한 라이브러리 생태계가 있습니다.

PHP 및 프레임 워크 : 언어 현대화PHP 및 프레임 워크 : 언어 현대화Apr 18, 2025 am 12:14 AM

PHP는 현대화 프로세스에서 많은 웹 사이트 및 응용 프로그램을 지원하고 프레임 워크를 통해 개발 요구에 적응하기 때문에 여전히 중요합니다. 1.PHP7은 성능을 향상시키고 새로운 기능을 소개합니다. 2. Laravel, Symfony 및 Codeigniter와 같은 현대 프레임 워크는 개발을 단순화하고 코드 품질을 향상시킵니다. 3. 성능 최적화 및 모범 사례는 응용 프로그램 효율성을 더욱 향상시킵니다.

PHP의 영향 : 웹 개발 및 그 이상PHP의 영향 : 웹 개발 및 그 이상Apr 18, 2025 am 12:10 AM

phphassignificallyimpactedwebdevelopmentandextendsbeyondit

스칼라 유형, 반환 유형, 노조 유형 및 무효 유형을 포함한 PHP 유형의 힌트 작업은 어떻게 작동합니까?스칼라 유형, 반환 유형, 노조 유형 및 무효 유형을 포함한 PHP 유형의 힌트 작업은 어떻게 작동합니까?Apr 17, 2025 am 12:25 AM

PHP 유형은 코드 품질과 가독성을 향상시키기위한 프롬프트입니다. 1) 스칼라 유형 팁 : PHP7.0이므로 int, float 등과 같은 기능 매개 변수에 기본 데이터 유형을 지정할 수 있습니다. 2) 반환 유형 프롬프트 : 기능 반환 값 유형의 일관성을 확인하십시오. 3) Union 유형 프롬프트 : PHP8.0이므로 기능 매개 변수 또는 반환 값에 여러 유형을 지정할 수 있습니다. 4) Nullable 유형 프롬프트 : NULL 값을 포함하고 널 값을 반환 할 수있는 기능을 포함 할 수 있습니다.

See all articles

핫 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 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경