workerman进程与线程的问题

chaz6chez

使用workerman内置的WebServer,我在业务代码中实现了两个接口,实现了一个A类,其中有一个静态属性来保存子类实例化的对象和一个实例化的静态方法(静态实现单例),B类和C类都继承A类;
第一个接口静态实例方法实例化了B类,这时候查看A类的静态属性,其中有了B类的对象信息。
第二个接口静态实例方法实例化了C类,这时候查看A类的静态属性,发现除了C的信息,还有B的信息。
两个接口分两次有间隔的请求触发的。
我就在想,是否是workerman启动了WebServer服务,主进程常驻了,单他也要创建线程去处理请求,在主进程的线程阻塞的时候才会克隆出子进程去处理其他的请求,然后在子进程闲置的时候其子进程消亡?
主要想了解的就是静态属性的生命周期问题。

3175 1 0
1个回答

walkor

https://wenda.workerman.net/question/29
这里有进程模型介绍。
 
和nginx类似,主进程派生出多个子进程,每个子进程独立处理请求,进程闲置的时候不退出,主进程只负责监控子进程是否有退出情况,不负责任何请求接收或者处理。

  • chaz6chez 2018-11-16

    了解了,也就是主进程启动的时候,子进程也派生好了,仅将其闲置,如遇到子进程退出后,主进程会补充。
    那也就是说各子进程内部的静态属性或方法是不会释放,除非自己做一个回收或者是遇到子进程退出才会被释放,对吧?

  • walkor 2018-11-16

    是的,静态属性不会释放

  • chaz6chez 2018-11-16

    @4967:找到了,是遵循PHP原有的GC方式,执行完会执行释放临时的变量

年代过于久远,无法发表回答
🔝