3-3 进程调度

进程调度

pcntl_fork创建一个子进程,此时会存在两个进程,此时cpu先执行那个进程由操作系统决定,一般父进程先运行几率高

在PHP扩展中,封装了可以控制进程优先级的函数

观察进程的调度信息 top|ps命令

第一行是操作系统信息,用户数,启动时间,平均负载

第二行 各状态任务 在linux中一个进程或线程为一个任务

第三行 cpu信息 .四 : 物理内存. 五: 交换分区 虚拟内存

PID 进程标识

USER 用户标识

PR : priority 优先级

NI : nice 进程的nice值 nice值越小,优先级越高

pcntl_setpriority 修改任意进程的优先级 https://www.php.net/manual/zh/function.pcntl-setpriority.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
$nice = $argv[1];
$start = time();
$count = 0;
$pid = pcntl_fork();

if($pid == 0){
    fprintf(STDOUT,"child pid %d, nice= %d\n",posix_getpid(),pcntl_getpriority());

    pcntl_setpriority($nice,getmygid(),PRIO_PROCESS);
    while(true){
        $count++;
        if(time()-$start > 5){
            break;
        }
    }
}else{
    fprintf(STDOUT,"parent pid %d, nice= %d\n",posix_getpid(),pcntl_getpriority());

//pcntl_setpriority($nice,getmygid(),PRIO_PROCESS);
    while(true){
        $count++;
        if(time()-$start > 5){
            break;
        }
    }
}
fprintf(STDOUT,"pid=%d,nice=%d,count=%d\n",posix_getpid(),pcntl_getpriority(),$count);

首先不给子进程设置优先级

可以看到父子进程的nice值相差不大,父进程的cpu占比要比子进程高些

给子进程设置优先级 20

可以看到此时父进程的cpu占比远超子进程,子进程的nice值变成了19

同样的,不改变子进程,调整父进程的nice值,同样会改变父进程的优先级,同时调整的话,父进程的优先级还是会略高于子进程