10、操作系统——线程的相关属性(2)

一、线程调度

1、三种调度算法

(1)SCHED_OTHER 分时调度策略(linux默认)

非实时的,无法设置优先级

该调度策略是 Linux 系统调度的默认策略,处于 0 优先级别的这些线程按照所谓的动态优先级被调度,而动态优先级起始于线程的 nice 值,且每当一个线程已处于就绪 态但被调度器调度无视时,其动态优先级会自动增加一个单位,这样能保证这些线程竞争 CPU 的公平性

(2)SCHED_FIFO实时调度策略,先到先服务

先到先服务。一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达、知道发送I/O请求、调用sched_yield()主动让出CPU

(3)SCHED_RR实时调度策略,时间片轮转

时间片轮转。

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

 2、pthread_attr_setschedpolicy/pthread_attr_getschedpolicy(获取、设置线程的调度策略)

10、操作系统——线程的相关属性(2)_第1张图片

 二、线程栈合警戒区

1、pthread_attr_setstacksize/pthread_attr_getstacksize(获取、设置线程栈大小、警戒区大小)

10、操作系统——线程的相关属性(2)_第2张图片

 2、各个线程相对独立的栈

10、操作系统——线程的相关属性(2)_第3张图片

线程的栈可能溢出,需要增大栈空间,因为有警戒区,故不需要这么做,警戒区是没有任何访问权限的内存,用来保护相邻的两条线程的栈空间不被彼此践踏。

三、pthread_cancel(线程取消)

10、操作系统——线程的相关属性(2)_第4张图片

你可能感兴趣的:(操作系统,linux)