I.PHP 멀티프로세스 사용법은 어떻게 되나요? ? (대부분의 PHP 프로그램에서 사용됨 | 거의 사용되지 않음)
II. PHP 멀티스레딩의 사용법은 무엇인가요? ? (대부분의 PHP 프로그램에서 사용됨 | 거의 사용되지 않음)
III. PHP 멀티 프로세스와 PHP 멀티 스레드는 Java와 어떻게 다른가요? ? (단순히 끔찍함 | 가깝지도 않음)
PHP는 멀티스레딩에 적합하지 않다는 말이 거의 인터넷에 나와 있습니다(멀티프로세스에도 적합하지 않은건가요??). 이는 멀티 등 PHP 관련 기능을 이해할 필요가 없다는 의미입니다. -스레딩과 다중 프로세스? ?
최근에는 개인 취향으로 인해 QQ와 유사한 웹 채팅 도구를 만들고 싶습니다. 이제는 기본적으로 소켓 통신을 이해하지만 Workerman과 같은 오픈 소스 통신 프레임워크에 대해 배웠습니다.
I. PHP 다중 프로세스는 멀티 코어 CPU를 활용하고 성능을 향상하며 높은 동시성을 지원할 수 있습니까? ?
II. 단일 PHP 프로세스는 수천 또는 수만 개의 동시 연결을 지원할 수 있으며, 여러 프로세스는 수십만 또는 수백만 개의 동시 연결을 지원할 수 있습니다. 이 문장을 어떻게 이해해야 할까요? ? 통신을 위해 소켓을 사용하기 때문에 포트 수는 실제로 고정되어 있으며 65536을 초과하지 않습니다. 여기서 언급된 수천 개의 포트는 한 쌍의 연결을 나타냅니다. "수만 개가 더 나을 수도 있고, 다중 프로세스는 수십만 또는 수백만 건의 베팅이 그렇게 강력하다고요? ?
I.PHP 멀티프로세스 사용법은 어떻게 되나요? ? (대부분의 PHP 프로그램에서 사용됨 | 거의 사용되지 않음)
II. PHP 멀티스레딩의 사용법은 무엇인가요? ? (대부분의 PHP 프로그램에서 사용됨 | 거의 사용되지 않음)
III. PHP 멀티 프로세스와 PHP 멀티 스레드는 Java와 어떻게 다른가요? ? (단순히 끔찍함 | 가깝지도 않음)
PHP는 멀티스레딩에 적합하지 않다는 말이 거의 인터넷에 나와 있습니다(멀티프로세스에도 적합하지 않은건가요??). 이는 멀티 등 PHP 관련 기능을 이해할 필요가 없다는 의미입니다. -스레딩과 다중 프로세스? ?
최근에는 개인 취향으로 인해 QQ와 유사한 웹 채팅 도구를 만들고 싶습니다. 이제는 기본적으로 소켓 통신을 이해하지만 Workerman과 같은 오픈 소스 통신 프레임워크에 대해 배웠습니다.
I. PHP 다중 프로세스는 멀티 코어 CPU를 활용하고 성능을 향상하며 높은 동시성을 지원할 수 있습니까? ?
II. 단일 PHP 프로세스는 수천 또는 수만 개의 동시 연결을 지원할 수 있으며, 여러 프로세스는 수십만 또는 수백만 개의 동시 연결을 지원할 수 있습니다. 이 문장을 어떻게 이해해야 할까요? ? 통신을 위해 소켓을 사용하기 때문에 포트 수는 실제로 고정되어 있으며 65536을 초과하지 않습니다. 여기서 언급된 수천 개의 포트는 한 쌍의 연결을 나타냅니다. "수만 개가 더 나을 수도 있고, 다중 프로세스는 수십만 또는 수백만 건의 베팅이 그렇게 강력하다고요? ?
개념 수정: 총 포트 수는 unsigned short(65535)입니다. 이는 서버가 너무 많은 연결만 지원할 수 있다는 의미는 아닙니다! 하나의 포트는 하나의 프로세스에 해당하며, 프로세스의 연결 수는 해당 프로세스가 연 socket描述符
의 수와 일치합니다. 설명자 수는 32비트 int 정도입니다. 물론 시스템에는 커널 매개변수를 통해 구성할 수 있는 프로세스의 최대 설명자에 대한 제한이 있지만 수십만 개라도 문제가 되지 않습니다.
일반적인 다중 프로세스 http 서버의 작동 원리는 대략 다음과 같습니다. 프로세스는 포트 80에서 연결을 수신하는 역할을 담당합니다. 연결이 도착하면 해당 설명자가 커널에 의해 생성되고 프로세스는 다음을 찾습니다. 비교적 유휴 상태子进程
이 설명자를 처리하려면, 즉 이 설명자에서 데이터를 읽고 쓰세요. 이는 子进程
라는 점에 유의하세요. 부모 프로세스와 자식 프로세스 간에 설명자가 전달될 수 있는 것은 바로 자식 프로세스 때문입니다. 액세스 수가 증가하고 하위 프로세스 수가 부족한 경우 상위 프로세스는 적절한 설명자를 처리하기 위해 새로운 하위 프로세스를 생성할 수 있습니다. 상위 프로세스는 어느 정도 간단한 로드 밸런싱 전략을 구현해야 합니다.
멀티 스레드 http 서버의 작동 원리는 실제로 유사합니다. 위의 进程
를 线程
로 변경하면 동일하게 설명할 수 있습니다.
위의 설명은 PHP와 관련이 없습니다. PHP는 이러한 기본 개념과 시스템 호출을 캡슐화할 뿐입니다. 대부분의 사람들은 PHP 스크립트 인터프리터를 기반으로 하는 PHP를 사용합니다. 그리고 workerman
은 PHP로 캡슐화된 시스템 호출을 기반으로 구현된 http 서비스여야 합니다.
php 프로세스는 php-fpm(fastcgi 구현)으로 관리됩니다. 마스터 프로세스는 요청을 하위 프로세스에 배포합니다.
마스터 프로세스: 서비스가 웹 서버와 통신
통신 구현 방법 1: http 소켓(호스트+포트)이 하나의 포트를 차지하게 되므로 여기서는 php-fpm이 하나의 포트만 차지하게 됩니다
통신 구현 방법 2: Unix 도메인 소켓(프로세스 간 통신), .sock 파일을 기반으로 하며 네트워크 프로토콜에 의존하지 않으므로 이론적으로 포트를 차지하지 않습니다.
풀 프로세스: 파서, 파싱 스크립트를 포함한 하위 프로세스