2010-04-23 72 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进程将要使用的最大内存。 因此,最好为每个线程分配这样的空间[安全的一面..它的大小的两倍]。