search

Home  >  Q&A  >  body text

apache - php是多线程的吗?

我在php5.2上面运行一个自动发邮件的程序,一开始运行后,再点别的链接都开始在等待状态了。是否是因为php是单线程排队运行?

天蓬老师天蓬老师2788 days ago683

reply all(4)I'll reply

  • 高洛峰

    高洛峰2017-04-10 15:30:16

    拿PHP-FPM来说,不管是线程安全(TS)还是非线程安全(NTS)版本,一个工作进程在同一时刻只能处理一个请求,要同时处理多个请求,则必须开启多个工作进程,比如在php-fpm.conf中配置开启5个pm.max_children = 5。

    工作在线程化MPM(比如Linux上的event,Windows上的winnt)下的Apache需要配合线程安全(TS)版PHP使用,这时,只要开启一个包含多个线程的Apache进程就能同时处理多个PHP请求。

    Linux event MPM


    StartServers 3
    MinSpareThreads 75
    MaxSpareThreads 250
    ThreadsPerChild 25
    MaxRequestWorkers 400
    MaxConnectionsPerChild 0

    Windows winnt MPM


    ThreadsPerChild 150
    MaxConnectionsPerChild 0

    PHP-FPM和Apache/PHP能不能同时处理多个请求,跟pthreads这个PECL扩展没有关系。

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 15:30:16

    只能说php-fpm或者php-cgi不是多线程的
    php本身是可以写多线程的

    http://php.net/manual/zh/class.thread.php

    reply
    0
  • 阿神

    阿神2017-04-10 15:30:16

    用swoole吧,并发so easy

    reply
    0
  • 怪我咯

    怪我咯2017-04-10 15:30:16

    php不是多线程的啊

    reply
    0
  • Cancelreply