setpriority
以下测试是为了验证setpriority函数对线程是否有效,理论上linux kernel是不区分调度是不区分线程和进程的。
用户线程和进程的区别是是否有独立的用户地址空间,线程的是共享的。
编译以下代码,运行 ./cpuidle.APP 19 -19
可以看到打印 -19 优先级的线程打印会比 19优先级的线程多 400多次, 几乎满屏都是 -19优先级的打印。
当有-19的线程运行,整个系统都要明显卡顿和19的线程相比。
以上愚见或许有不对之处,请多多包涵。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/time.h>
#include <pthread.h>
#include<sys/resource.h>
static void *cpuidle_loop(void *arg)
{
int pri;
int size = 0, sum = 0;
unsigned long long int loopCnt=0;
struct timeval tv;
int ret;
pri = *(int *)arg;
printf("[%s]pri=%d\n", __func__, pri);
setpriority(PRIO_PROCESS, 0, pri);
do{
sum+=size;
size += 10;
loopCnt+=10;
if(0==(loopCnt%1000000)){
printf("pri[%d]loopCnt=%lld\n", pri, loopCnt);
}
}while(1);
printf("size2=%d\n", size);
pthread_exit(NULL);
return NULL;
}
int main(int argn, char *argc[])
{
int i=50;
int pri = 0, pri2=0;
int size = 0, sum = 0;
pthread_t thread_id, thread_id2;
printf("arg1=%s\n", argc[1]);
pri = strtol(argc[1], NULL, 10);
pri2 = strtol(argc[2], NULL, 10);
printf("main pri=%d, pri2=%d\n", pri, pri2);
pthread_create(&thread_id, NULL, cpuidle_loop, &pri);
pthread_create(&thread_id2, NULL, cpuidle_loop, &pri2);
do{
sum+=size;
size += 10;
sleep(10);
}while(1);
printf("size=%d\n", size);
EXIT:
exit(0);
}
相关阅读
进程和程序区别和联系表现在以下方面:1)程序只是一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体。而进程则不同
主流的Linux发行版大致分为两个流派,第一个流派是日趋商业化的RedHat红帽系列,商业化的Redhat linux 从版本9开始变成了RHEL( Re
源文件 APT的软件源定义来自/etc/apt/sources.list文件(源文件),记录了Linux系统下所有软件包的来源。 /etc/apt/sources.li
使用kali linux系统,安装ibus。 配置更新源 打开终端进入:/etc/apt/sources.list使用vim添加下列更新源(i:开始编辑)#kali官方源deb h
ps是进程查看命令,可用于查看当前运行的进程信息。 ps命令-参数: A :所有的进程均显示出来,与 -e 具有同样的效用; -a : 显示现行终