linux内核线程怎么设置优先级

linux内核线程怎么设置优先级,第1张

Linux内核的三种调度策略

1,SCHED_OTHER

分时调度策略,

2,SCHED_FIFO实时调度策略,先到先服务。一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃

3,SCHED_RR实时调度策略,时间片轮转。当进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平

Linux线程优先级设置

首先,可以通过以下两个函数来获得线程可以设置的最高和最低优先级,函数中的策略即上述三种策略的宏定义:

int

sched_get_priority_max(int

policy)

int

sched_get_priority_min(int

policy)

SCHED_OTHER是不支持优先级使用的,而SCHED_FIFO和SCHED_RR支持优先级的使用,他们分别为1和99,数值越大优先级越高。

设置和获取优先级通过以下两个函数:

int

pthread_attr_setschedparam(pthread_attr_t

*attr,

const

struct

sched_param

*param)

int

pthread_attr_getschedparam(const

pthread_attr_t

*attr,

struct

sched_param

*param)

例如以下代码创建了一个优先级为10的线程:

struct

sched_param

{

int

__sched_priority

//所要设定的线程优先级

}

例:创建优先级为10的线程

pthread_attr_t

attr

struct

sched_param

param

pthread_attr_init(&attr)

pthread_attr_setschedpolicy(&attr,

SCHED_RR)

param.sched_priority

=

10

pthread_attr_setschedparam(&attr,

¶m)

pthread_create(xxx

,

&attr

,

xxx

,

xxx)

pthread_attr_destroy(&attr)

public final void setPriority(int newPriority)

更改线程的优先级。

主线程的优先级是 5

将线程的优先级设为 Thread.MAX_PRIORITY 就可以了 max的优先级为10

public class MyThread1 extends Thread{

MyThread1(String name){

super(name)

}

@Override

public void run() {

for(int i = 0 i < 10000  i++){

System.out.println(getName()+": "+i)

}

}

}

public class MyThread2 extends Thread{

MyThread2(String name){

super(name)

}

@Override

public void run() {

for(int i = 0 i < 10000  i++){

System.out.println(getName()+": "+i)

}

}

}

public class Test {

public static void main(String[] args) {

MyThread1 t1 = new MyThread1("t1")

MyThread1 t2 = new MyThread1("t2")

t1.setPriority(Thread.NORM_PRIORITY + 3)

t1.start()

t2.start()

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11152624.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存