【注意】最后更新于 October 25, 2022,文中内容可能已过时,请谨慎使用。
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值,同样会改变父进程的优先级,同时调整的话,父进程的优先级还是会略高于子进程