关于APUE 图8-30 nice函数的例子
来源:互联网 发布:大庄家软件官网 编辑:程序博客网 时间:2024/04/29 11:26
#include "apue.h"//自定义重要头文件#include <dirent.h>//目录读取函数#include "myerror.h"//定义自定义出错打印函数#include <sys/wait.h>//进程等待处理#include <errno.h>//出错处理#include <signal.h>#include <fcntl.h>//文件IO操作头文件#include <unistd.h>//Symbolic Constants mode_t#include <sys/stat.h>#include <limits.h>#include "pathalloc.h"#include <sys/time.h>unsigned long long count;struct timeval end;void checktime(char *str){ struct timeval tv; gettimeofday(&tv , NULL); if( tv.tv_sec >= end.tv_sec && tv.tv_usec >= end.tv_usec){ printf("%s count = %lld\n" , str , count);//让程序运行10s就退出 exit(0); }}int main(int argc , char *argv[]){ pid_t pid; char *s; int nzero , ret; int adj = 0; setbuf(stdout , NULL); nzero = sysconf(_SC_NZERO);//nice默认一般是20 printf("NZERO = %d\n" , nzero); if(argc == 2 ) adj = strtol(argv[1] , NULL , 10); gettimeofday(&end , NULL); end.tv_sec += 3;//让程序运行3s停止 if((pid = fork()) < 0) err_sys("fork error"); else if(pid == 0){ s = "child"; printf("current nice value in child is %d , adjusting by %d\n" ,nice(0)+nzero , adj ); errno = 0;//清0,好检查这个返回值. if((ret = nice(adj)) == -1 && errno != 0) err_sys("child set scheduling pri"); printf("now child nice is %d\n",ret + nzero );//nice函数调用成功返回adj的数值。如adj=3,那么返回3,进程新的nice值等于原来nice值+3;如adj=20,那么返回19,因为nice最大为39 = 2*NZERO-1 }else{ s = "paren"; printf("current nice value in parent is %d\n" ,nice(0)+nzero); } for(;;){ if( ++count == 0) err_quit("%s counter wrap" , s); checktime(s); }}//由此证明Ubuntu上nice数值对进程调度优先级影响并不是那么大.//两个进程做着同样的事情,但是让他们的nice数值不同,这可以比较他们的调度次数,哪个多.那么就是优先级高
- 执行./apue 输出:
NZERO = 20
current nice value in parent is 20
current nice value in child is 20 , adjusting by 0
now child nice is 20
child count = 30094192
paren count = 30188723
可以得出,nice相同时候进程调度次数差不多。 - 执行./apue 20 输出:
NZERO = 20
current nice value in parent is 20
current nice value in child is 20 , adjusting by 20
now child nice is 39
child count = 29550495
paren count = 29476920
可以得出,nice不同时进程调度次数同样差不多,父子进程占用cup资源也差不多,和APUE上面的运行结果很不一样。正常此种情况会因为子进程nice过大,优先级降低,count数值应该小很多。这就出现了问题,需要深入内核看看真正的进程调度策略才可知晓,立个flag,以后深入内核调度,回来解决这个问题。
未完待续…………………
阅读全文
0 0
- 关于APUE 图8-30 nice函数的例子
- 关于APUE 图8-8 孤儿进程例子
- 关于apue中 open函数
- 关于path_alloc函数(APUE)
- 关于path_alloc 函数(APUE)
- 关于分析函数的例子
- 在Linux下编译APUE的例子
- apue-alarm和pause函数,关于信号
- apue里面的各种函数
- APUE--sigaction函数的使用
- 关于APUE 程序清单8-5的理解
- 关于c++函数对象的一个例子
- 关于getchar()函数的一个例子
- 关于虚函数一个很好的例子
- 关于快排函数的一些例子
- apue第三版 在信号处理程序中调用不可再入函数 的例子遇到的问题
- 关于APUE里面TELL_WAIT()之类函数的两种实现方式
- 记录关于APUE的编译方法
- C语言的伪随机数
- 卡尔曼滤波算法
- GET.DOCUMENT宏表函数说明
- table 中添加checkbox控件无法显示
- ansj_seg 学习,自定义词典加载
- 关于APUE 图8-30 nice函数的例子
- SSH中tomcat下中文名称图片不显示的问题
- 矩形剖分
- readmine-wiki的表格编辑格式-语法举例
- 汇编语言入门八:函数调用(二)
- java写excel文件及遇到的问题
- 日志
- 温度转换(python笔记)
- Count the string(KMP)