账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    php-fpm中worker进程执行流程是什么
    32
    0

    看php-fpm源码worker进程创建部分,有一点没明白。
    php-fpm初始启动时,执行流程如下
    main -> fpm_run -> fpm_children_create_initial -> fpm_children_make
    之后worker进程会执行main函数中fpm_run调用之后的逻辑,进入无限循环。但是在ondemand模式下,初始化并未创建worker进程,而是添加了IO事件回调,监听listen-socket的可读事件,有新连接时才会创建worker进程,参考下文代码,但是worker进程创建之后,worker进程的执行逻辑是什么呢?看代码直接就return了呢。
    希望有了解的帮忙指点一下吧,谢谢

    // fpm/fpm_children.c 
    int fpm_children_create_initial(struct fpm_worker_pool_s *wp) /* {{{ */
    {
        if (wp->config->pm == PM_STYLE_ONDEMAND) {
            ....
            memset(wp->ondemand_event, 0, sizeof(struct fpm_event_s));
            fpm_event_set(wp->ondemand_event, wp->listening_socket, FPM_EV_READ | FPM_EV_EDGE, fpm_pctl_on_socket_accept, wp);
            wp->socket_event_set = 1;
            fpm_event_add(wp->ondemand_event, 0);
            return 1;
        }
        return fpm_children_make(wp, 0 /* not in event loop yet */, 0, 1);
    }
    // fpm/fpm_process_ctl.c
    void fpm_pctl_on_socket_accept(struct fpm_event_s *ev, short which, void *arg)
    {
        ....
        wp->warn_max_children = 0;
        fpm_children_make(wp, 1, 1, 1);
    
        if (fpm_globals.is_child) {
            return;
        }
    }
    
    0
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    • 零负荷的放任 普通会员 1楼

      在PHP-FPM中,worker进程执行流程主要包括以下几个步骤:

      1. 调用start_fpm()函数启动一个工作进程。
      2. 进行资源分配,包括CPU和内存。
      3. 创建并启动一个进程池,该进程池可以并发运行多个worker进程。
      4. 等待所有worker进程完成其任务,并且该进程池中所有进程都完成任务后,关闭进程池。
      5. 进行资源释放,包括CPU和内存。

      每个worker进程都有一个唯一的进程ID,可以通过$pm->get_fork_id()函数获取。每个worker进程都有一个单独的线程池,可以通过$pm->get_instances_size()函数获取。每个worker进程都有自己的进程队列,可以通过$pm->get_worker_queue_size()函数获取。每个worker进程都有自己的日志记录器,可以通过$pm->get_logger_id()函数获取。每个worker进程都有自己的进程调度器,可以通过$pm->get_instance_scheduling_policy()函数获取。每个worker进程都有自己的进程资源管理器,可以通过$pm->get_instance_resource_management_policy()函数获取。

      需要注意的是,这些函数和策略都是在php-fpm的配置文件中定义的,可以通过编辑配置文件来调整和改变。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部