2010-04-23 2 views
1

상황 :멀티 스레드 프로그램 : 계산 스레드 스택 공간

내가 스레드의 수를 유지 C에서 프로그램을 쓰고 있어요. 스레드가 끝나면 새로운 스레드가 생성됩니다.

각 스레드가 포크 - 자식이 exec()를 통해 PHP 프로세스를 실행하고 부모가 마칠 때까지 기다립니다.

각 PHP 프로세스는 대기열에서 다음 항목을 가져 와서 처리하고 종료합니다.

Basic 코드 : http://www.4pmp.com/2010/03/multitasking-php-in-parallel/

문제 :

PHP의 프로세스가 심포니 작업하고 심포니의 메모리가 상당히 많은 양을 필요로한다. PHP 프로세스에 충분한 메모리가 있도록 각 스레드에 필요한 스택 공간을 안전하게 계산하려면 어떻게해야합니까?

php.ini에 설정된 메모리 제한이 128MB이므로 스택에이 많은 공간을 할당해야합니까?

+1

왜 그런 스레드를 돌았습니까? 하나의 작업을 수행하기 위해 스레드를 얻을 수 없습니까? –

+0

이 경우 대기열의 각 항목은 전자 메일이므로 멀티 스레딩은 병목 현상이 CPU가 아니라 SMTP 통신이므로 의미가 있습니다. – SlappyTheFish

+0

PHP의 memory_limit은 스택이 아니라 힙을위한 것이라고 확신합니다. –

답변

3

fork 새 프로세스가 생기면 exec 프로세스가 실행 프로세스로 바뀝니다. 따라서 C 프로그램의 스택 공간 설정은 PHP 메모리 사용량과 관련이 없습니다.

+0

확실히 - 할당 된 스택 공간을 상속하지 않습니까? – SlappyTheFish

+0

네, 맞습니다. http://www.opengroup.org/onlinepubs/000095399/functions/exec.html – SlappyTheFish

0

그렇습니다. PHP.ini가 메모리 사용/제한을 128MB로 제한하고 있기 때문에 PHP 프로세스가 사용할 최대 메모리를 알고 있습니다. 그래서 각 스레드에 대해 이러한 공간을 할당하는 것이 더 좋습니다. [안전면 .. 두 배의 크기].