답변
PCNTL은 스레드를 만들 수 없습니다. 현재 PHP 프로세스 만 "fork"합니다. 무슨 뜻이에요? pcntl_fork()
으로 전화하면 현재 프로세스가 두 개의 프로세스로 분할됩니다. 상위 프로세스의 전체 네임 스페이스가 하위 프로세스에 복사되고 두 프로세스가 하나의 차이와 함께 실행을 계속합니다. pcntl_fork()
은 상위의 하위 PID를 반환하고 하위는 0
을 반환합니다.
일부 힌트 :
- 은 기본적으로 비활성화되어 있습니다. 활성화하려면 CLI 전용으로하십시오. 웹 서버와 함께 사용하지 마십시오! 비 결정적 방식으로 작동합니다. 그것은 또한 전체 기계를 다운시킬 수 있습니다. 제발, 사용하지 말고 계속 읽으십시오.
- 프로세스간에 통신이 가능하지만 무서울 수도 있습니다 (공유 메모리의 직렬화 된 객체를 통해).
- 파일 설명자 (및 데이터베이스 연결)가 공유되므로 문제가 자주 발생합니다. 을 포크 한 후 DB를 다시 연결해야합니다. 그렇지 않으면 첫 번째 포트가 연결을 닫을 때 모든 포크 된 프로세스에서
MySQL server has gone away
과 같은 오류가 발생합니다. - 부모 프로세스는 자식이 끝날 때까지 기다려야하거나 좀비를 떠날 것입니다. 프로세스가 시스템 리소스를 소비합니다.
여기 예를 from documentation입니다 :
<?php
$pid = pcntl_fork();
if ($pid == -1) {
die('could not fork');
} else if ($pid) {
// we are the parent
pcntl_wait($status); //Protect against Zombie children
} else {
// we are the child
}
하지만 기억, PHP는 언어를 스크립팅있다. 병렬 컴퓨팅을 위해 설계된 것은 아닙니다. 필요에 따라 CRON, 메시지 대기열 또는 프로그램을 저급 언어로 동시에 실행하면 더 효율적으로 일할 수 있습니다.
포크로 묶인 PHP 프로그램은 읽고 이해하기 쉽고 디버그하기가 어렵습니다. 그 프로그램을 유지하는 것은 악몽 일 것입니다.
실수하지 말고 분기하지 마십시오. 너는 필요 없어. 당신이 정말로 필요로하는 것은 비동기 작업 주자입니다. 포크 (fork)는 당신에게 또 하나 개의 이점을 제공하는 대신 사용하여 메시지 큐 : 뉴스 좋은, 또한 RabbitMQ 라이브러리를 약속 시도 할 수 있습니다 ;-) RabbitMQ 및 nice tutorial이는 Bunny
PS했다. 여러 서버로 대기열을 처리하고 트래픽이 증가함에 따라 수평으로 확장 할 수 있습니다.
답장을 보내 주셔서 감사합니다 :) –
- 1. PHP에서 클로저가 어떻게 작동합니까?
- 2. 헤더는 PHP에서 어떻게 작동합니까?
- 3. PHP에서 "imagettfbbox()"는 어떻게 작동합니까?
- 4. 가비지 컬렉터는 PHP에서 어떻게 작동합니까?
- 5. PHP에서 eval 함수는 어떻게 작동합니까?
- 6. php에서 javascript 문자 카운터를 어떻게 작동합니까?
- 7. PHP에서 헤더가 출력 버퍼링과 어떻게 작동합니까?
- 8. PHP에서 open_basedir의 사용법은 무엇이며 어떻게 작동합니까?
- 9. PHP에서 논리적 연산자는 non-boolean으로 어떻게 작동합니까?
- 10. php/mongodb : php에서 참조가 어떻게 작동합니까?
- 11. FastCGI는 PHP에서 잘 작동합니까?
- 12. Twitter Bootstrap은 PHP에서 작동합니까?
- 13. Node.js MVC는 어떻게 작동합니까?
- 14. PHP에서 전역 변수, 객체 및 참조 - 어떻게 작동합니까?
- 15. 어떻게 작동합니까?
- 16. 어떻게 작동합니까?
- 17. - 어떻게 작동합니까?
- 18. 어떻게 작동합니까?
- 19. 어떻게 작동합니까?
- 20. http://qwebirc.org/는 어떻게 작동합니까?
- 21. Assembly.Load (byte [])는 어떻게 작동합니까?
- 22. 메모리 조각 모음 소프트웨어. 어떻게 작동합니까? 작동합니까?
- 23. PHP에서 echo mql에서 HTML 코드가 작동합니까?
- 24. '새로운'메시지 개념은 어떻게 작동합니까?
- 25. smackaho.st는 어떻게 작동합니까?
- 26. Zalgo 텍스트는 어떻게 작동합니까?
- 27. stringstream은 어떻게 내부적으로 작동합니까?
- 28. 작은 URL은 어떻게 작동합니까?
- 29. doRedis는 어떻게 작동합니까?
참조 http://stackoverflow.com/q/19546588/632951 – Pacerier