gpt4 book ai didi

linux - nice() 是用来改变线程优先级还是进程优先级?

转载 作者:IT王子 更新时间:2023-10-29 00:22:46 25 4
gpt4 key购买 nike

nice 的手册页说“nice() 将 inc 添加到 calling process 的 nice 值中。那么,我们可以使用它来更改 nice 值吗? pthread_create 创建的线程?

编辑:看来我们可以为每个线程设置nice值。

我编写了一个应用程序,为不同的线程设置了不同的 nice 值,并观察到“更好”的线程已被调度为具有较低的优先级。查看输出结果,发现字符串“high priority ...............”的输出频率更高。

void * thread_function1(void *arg)
{
const pid_t tid = syscall(SYS_gettid);

int ret = setpriority(PRIO_PROCESS, tid, -10);
printf("tid of high priority thread %d , %d\n", tid ,getpriority(PRIO_PROCESS, tid));
while(1)
{
printf("high priority ................\n");
}
}


void * thread_function(void *arg)
{
const pid_t tid = syscall(SYS_gettid);
int ret = setpriority(PRIO_PROCESS, tid, 10);
printf("tid of low priority thread %d , %d \n", tid ,getpriority(PRIO_PROCESS, tid));
while(1)
{
printf("lower priority\n");
}
}


int main()
{
pthread_t id1;
pthread_t id2;

pid_t pid = getpid();
pid_t tid = syscall(SYS_gettid);

printf("main thread : pid = %d , tid = %d \n" , pid, tid);
pthread_create(&id1, NULL, thread_function1, NULL);
pthread_create(&id2, NULL,thread_function, NULL);

pthread_join(id1, NULL);
pthread_join(id2, NULL);
}

最佳答案

pthreads man page 表示:

POSIX.1 also requires that threads share a range of other attributes (i.e., these attributes are process-wide rather than per-thread):

[...]

  • nice value (setpriority(2))

因此,从理论上讲,“niceness”值对于进程是全局的并由所有线程共享,您不应该能够为一个或多个单独的线程设置特定的 niceness。

但是,同一个手册页还说:

LinuxThreads

The notable features of this implementation are the following:

[...]

  • Threads do not share a common nice value.

NPTL

[...]

NPTL still has a few non-conformances with POSIX.1:

  • Threads do not share a common nice value.

事实证明,Linux 上的两种线程实现(LinuxThreads 和 NPTL)实际上都违反了 POSIX.1,您可以通过将 tid 传递给 setpriority() 来为一个或多个单独的线程设置特定的 niceness在这些系统上。

关于linux - nice() 是用来改变线程优先级还是进程优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7684404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com