马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
任务优先级
Linux系统中任务优先级分为两种:一种是静态优先级,一种是动态优先级
- 静态优先级指的是任务一旦设置好优先级之后就不能再改变,相当于是任务本身的属性,优先级范围是0~99,优先级数值越大则优先级越高。
- 平凡任务的优先级是0,系统任务的优先级是1~99
pthread_attr_setinheritsched函数
此函数可以设置线程的继承调度属性- int pthread_attr_setinheritsched(pthread_attr_t *attr, int inheritsched);
- //attr:指向 pthread_attr_t 类型的指针,表示线程属性结构
- //inheritsched:指定线程的调度策略继承方式
- //PTHREAD_INHERIT_SCHED:新线程继承父线程的调度策略和参数
- //PTHREAD_EXPLICIT_SCHED:新线程使用显式指定的调度策略和参数
- //ret:成功返回 0,失败返回错误码
复制代码 pthread_attr_getinheritsched函数
此函数可以获取线程的继承调度属性- int pthread_attr_getinheritsched(const pthread_attr_t *attr, int *inheritsched);
- //attr:指向 pthread_attr_t 类型的指针,表示线程属性结构
- //inheritsched:指定线程的调度策略继承方式
- //ret:成功返回 0,失败返回错误码
复制代码 notice:一条线程如果以默认的属性进行创建,则该线程的调度策略被设置为SCHED_OTHER,并且线程的优先级默认设置为0,意味着创建的线程属于平凡任务。
线程的调度策略
Linux系统中线程的调度策略分三种:SCHED_OTHER、SCHED_FIFO、SCHED_RR
- SCHED_OTHER调度策略指的是分时调度策略
注意:如果一个线程以SCHED_OTHER调度策略进行创建,线程的静态优先级必须设置为0。
- SCHED_FIFO调度策略指的是及时调度策略,采用“先到先服务”的调度方式,当一条线程采用该调度策略则会一直运行,直到它被更高优先级的线程抢占或者主动放弃CPU,才会交出控制权。
- SCHED_RR指的是及时调度策略,是一种基于时间片轮转的调度策略,它会给每个线程设置一个固定的优先级,并按照优先级次序对线程进行轮流调度。
pthread_attr_setschedpolicy函数
此函数可以设置线程的调度属性- int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);
- //attr:指向 pthread_attr_t 类型的指针,表示线程属性结构
- //policy:线程的调度策略
- //ret:成功返回 0,失败返回错误码
复制代码 pthread_attr_getschedpolicy函数
此函数可以获取线程的调度属性- int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy);
- //attr:指向 pthread_attr_t 类型的指针,表示线程属性结构
- //policy:线程的调度策略
- //ret:成功返回 0,失败返回错误码
复制代码 pthread_attr_setschedparam函数
该函数可以设置线程的优先级- struct sched_param {
- int sched_priority; // 线程的优先级
- };
- int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param);
- //attr:指向 pthread_attr_t 类型的指针,表示线程属性结构
- //param:struct sched_param 类型的指针,表示线程的调度参数
- //ret:成功返回 0,失败返回错误码
- //notice:如果线程的调度策略是SCHED_OTHER,则线程的优先级必须设置为0,用于表示普通任务
复制代码 pthread_attr_setschedparam函数
该函数可以获取线程的优先级- int pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param);
- //attr:指向 pthread_attr_t 类型的指针,表示线程属性结构
- //param:struct sched_param 类型的指针,表示线程的调度参数
- //ret:成功返回 0,失败返回错误码
复制代码 动态优先级
动态优先级指的是当多个平凡任务并发运行时,系统会根据其实际运行的体现来动态地调整他们的nice值
注意:Linux系统中线程的nice值越高,则优先级越低,而nice值越低,反而优先级越高,nice的范围为 -20 ~ 19- int nice(int incr);
- //incr:要调整的优先级增量
- //ret:成功返回调整后的nice值,失败返回错误码
复制代码 线程信号响应
当一个进程收到信号之后,进程中的哪个线程响应此信号是不确定的
pthread_kill函数
该函数可以向指定的线程发送信号- int pthread_kill(pthread_t thread, int sig);
- //thread:指定要发送信号的线程的ID
- //sig:指定要发送的信号 SIGTERM:终止线程 SIGINT:中断线程等
- //ret:成功返回 0,失败返回错误码
复制代码 pthread_sigqueue函数
此函数可以给某个线程发送信号并发送一个额外的数据- union sigval {
- int sival_int; // 整数值
- void *sival_ptr; // 指针值
- };
- int pthread_sigqueue(pthread_t thread, int sig, const union sigval value);
- //thread:指定要发送信号的线程的ID
- //sig:指定要发送的信号 SIGTERM:终止线程 SIGINT:中断线程等
- //value:指定要传递给线程的值
- //ret:成功返回 0,失败返回错误码
复制代码 sigprocmask函数
该函数可以对某个信号进行屏蔽- int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
- //how:修改信号掩码
- //SIG_BLOCK:将 set 中的信号添加到当前信号掩码中,阻塞这些信号。
- //SIG_UNBLOCK:从当前信号掩码中移除 set 中的信号,解除这些信号的阻塞。
- //SIG_SETMASK:将当前信号掩码设置为 set 中的值,直接替换当前信号掩码。
- //set:信号集合
- //oldset:填NULL即可
复制代码 [code][/code]
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |