2010-04-23 102 views
1

現狀:多線程程序在C:計算線程堆棧空間

我寫在C程序,維護了大量的線程。線程結束後,會創建一個新線程。

每個線程分叉 - 子進程通過exec()運行一個PHP進程,父進程等待它完成。

每個PHP進程從隊列中取下一個項目,處理它並退出。

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

問題:

PHP的過程是Symfony的任務,Symfony的,需要相當大量的內存。我如何安全地計算每個線程所需的堆棧空間,以便PHP進程具有足夠的內存?

在php.ini中設置的內存限制是128Mb,所以我應該在堆棧中分配這麼多空間嗎?

+1

你爲什麼通過這樣的線程流失?難道你不能只是得到一個線程來執行一個接一個的任務嗎? – 2010-04-23 12:19:48

+0

在這種情況下,隊列中的每個項目都是電子郵件,因此多線程很有意義,因爲瓶頸不是CPU,而是SMTP通信。 – SlappyTheFish 2010-04-23 12:46:24

+0

我很確定PHP的memory_limit是堆,而不是堆棧。 – 2010-04-23 12:47:20

回答

3

當你fork你得到一個新的進程,當你exec進程被你執行的進程取代。因此,C程序中的任何堆棧空間設置都與PHP內存使用情況無關。

+0

當然 - 但它不會繼承分配的堆棧空間嗎? – SlappyTheFish 2010-04-23 12:18:41

+0

好吧,它不 - 你是對的:http://www.opengroup.org/onlinepubs/000095399/functions/exec.html – SlappyTheFish 2010-04-23 13:02:33

0

以一種方式是......因爲PHP.ini限制內存使用/限制爲128 MB,所以我們知道這是PHP進程將要使用的最大內存。 因此,最好爲每個線程分配這樣的空間[安全的一面..它的大小的兩倍]。