【问题标题】:Multithreaded program in C: calculating thread stack spaceC中的多线程程序:计算线程堆栈空间
【发布时间】:2010-04-23 12:11:43
【问题描述】:

情况:

我正在用 C 语言编写一个维护多个线程的程序。一旦线程结束,就会创建一个新线程。

每个线程分叉 - 子进程通过 exec() 运行 PHP 进程,父进程等待它完成。

每个 PHP 进程从队列中取出下一项,处理它并退出。

基本代码:http://www.4pmp.com/2010/03/multitasking-php-in-parallel/

问题:

PHP 进程是 Symfony 任务,Symfony 需要相当大量的内存。如何安全地计算每个线程所需的堆栈空间,以便 PHP 进程有足够的内存?

php.ini 中设置的内存限制是 128Mb,我应该在堆栈中分配这么多空间吗?

【问题讨论】:

  • 你为什么要像这样搅动线程?你不能让一个线程一个接一个地执行一个任务吗?
  • 在这种情况下,队列中的每个项目都是一封电子邮件,因此多线程是有意义的,因为瓶颈不是 CPU,而是 SMTP 通信。
  • 我很确定 PHP 的 memory_limit 是针对堆而不是堆栈的。
  • 也许我应该提一下,每个 PHP 进程实际上处理队列中的 x 个项目(在本例中为 1000 个)

标签: php c multithreading stack


【解决方案1】:

当您fork 时,您将获得一个新进程,当您 exec 时,该进程将被您执行的进程替换。因此,C 程序中的任何堆栈空间设置都与 PHP 内存使用无关。

【讨论】:

【解决方案2】:

以一种方式是的.. 因为,由于 PHP.ini 将内存使用/限制限制为 128 MB,我们知道这是 PHP 进程将使用的最大内存。 所以,最好为每个线程分配这样的空间 [安全方面.. 将它的大小加倍]。

【讨论】:

    猜你喜欢
    • 2015-09-08
    • 2012-11-14
    • 2010-10-21
    • 2013-06-11
    • 1970-01-01
    • 2014-12-23
    • 2014-09-14
    • 2012-12-14
    • 1970-01-01
    相关资源
    最近更新 更多