php fastcgi的异步调用、多线程、select
系统的php是使用fastcgi提供服务的,启动时预先spawn了n个php-cgi进程,轮流提供服务。由于用php做了一些服务,而这些服务的执行时间比较长,涉及到多个网络节点之间交互,这样就导致php-cgi进程在为一个请求提供服务之后,下个请求就必须排队等待,明显降低了吞吐量。
这个问题研究了很久,还是没解。有个规避的方法,就是让php-cgi按需启动,如果进程数不够就自动fork一个,这样可以最大限度的利用系统资源,但比较浪费内存,而且不好管理,一旦某个进程挂死,就会一直挂住,外界无法干预。