爲nice
手冊頁說:「好()增加了增量爲調用進程的nice值所以,我們可以用它來改變nice值由pthread_create
是nice()用來改變線程優先級還是進程優先級?
編輯創建的線程:? 我們似乎可以設置每個線程的好價值
我寫了一個應用程序,爲不同的線程設置不同的nice值,並觀察到「較好」的線程已經被調度爲較低優先級。發現字符串「高優先級................」被輸出的次數更多。
void * thread_function1(void *arg)
{
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)
{
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);
}
但爲什麼在某些JVM實現中,java線程優先級與nice值具有1:1映射關係? //www.javamex.com/tutorials/threads/priority_what。shtml另外,我寫了一個應用程序,爲不同的線程設置不同的好值,並且觀察到較好的線程已經被安排在較低的優先級,通過檢查輸出的頻率。 – pierrotlefou
@pierr,有趣的是,事實證明,NPTL和Linux線程都違反了POSIX.1。我會更新我的答案。 –
@FrédéricHamidiLinux上的線程仍然沒有共享一個很好的價值嗎? – blueskin