fifo线程比中断线程优先级高

fifo线程比中断线程优先级高,第1张

每个先产生的线程都继承福线程的优先级。如Thread,如果有很多线程处于就绪状态.NORM_PRIORITY(常数5)每个线程都具有各自的优先级。其中每个线程的优先级都在Thread.MAX_PRIORITY(常数10)之间,如垃圾回收机制线程的优先级就比较低。所以很多垃圾得不到及时的回收处理.MIN_PRIORITY到Thread.MAX_PRIORITY(常数10).NORM_PRIORITY(常数5)。

Thread类中包含的成员变量代表了线程的某些优先级,Thread,线程的优先级可以在程序中表明该线程的重要性,

Thread,在默认情况下优先级都是Thread,在时间结束后。但这个并不意味着低

优先级的线程得不到运行,每个线程都会得到一小段CPU时间片运行,而只是它运行的几率比较小,这是系统就会选择与当前优先级相同的程序予以运行.MIN_PRIORITY(常数1),系统会根据优先级来决定首先使哪个线程进入运行状态,将轮换另一个线程进入运行状态。

在多任务的 *** 作系统中,系统始终选择就绪状态下优先级较高的线程进入运行状态

你刚讲了线程1的优秀级高,那么中断来了之后,肯定要先处理这个线程。

系统不会强制结束当前的线程,如果这样做可能导致死机活崩溃,因为该线程可能是系统的。

正常的做法是将该线程的数据备份,处理优先级高的,之后再回来继续工作

在 Linux性能分析-平均负载 中,提到过一种导致平均负载升高的情况,就是有大量进程或线程等待cpu调度。

为什么大量进程或者线程等待CPU调度会导致负载升高呢?

当大量进程或者线程等待调度时,cpu需要更加频繁的切换任务,在切换任务的过程中,需要保存上一个任务的context到内核中,并且恢复当前任务的context,这种保存和恢复的 *** 作也是需要cpu来执行的,导致cpu都消耗在了 保存上文和恢复下文 这个过程中。

除了进程和线程导致的上下文切换以外,硬件产生的中断事件也会导致上下文切换。并且中断事件的优先级是高于线程和进程任务的。

这篇文章会模拟测试这种情况。

vmstat是一个观测总体上下文切换状况的命令。

下面指令可以每隔5秒输出一组数据。

重点关注列含义:

使用vmstat关注到了整体的情况,接下来可以使用pidstat关注具体线程的情况

注:pidstat -wt 可以输出线程的情况

重点关注列含义:

系统环境:

首先安装sysbench,使用sysbench,我们可以模拟一个进程内多线程调度引起的上下文切换问题。

安装好后,执行下面命令

查看下vmstat和pidstat

观察vmstat结果,可以看到

观察pidstat两类结果,可以发现

整体结果符合我们的预期。

针对in列显著提高,可以查看 /proc/interrupts 文件,里面记录了中断相关的数据,这些数据记录的是从上次启动到现在的累加值。

我们把系统重新启动下,看下空闲状态下的文件

当执行sysbench命令后,并运行一段时间后,该文件如下

其中,LOC和RES显著升高

RES表示,唤醒空闲状态的CPU来调度新的任务运行,和我们模拟的过多任务调度有关。

LOC不太理解,暂时先放在这里。


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

原文地址:https://54852.com/yw/9029150.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存