就绪状态的线程消耗CPU

时间:2015-11-20 07:50:31

标签: multithreading qnx

据我所知,只有处于运行状态的线程实际上消耗CPU,但在QNX平台中如下所示,总CPU状态为99.3,这是四个线程的累计,其中只有一个线程处于运行状态。

知道为什么CPU比运行线程消耗的更多吗?

    CPU states: 99.3% user, 0.6% kernel
    CPU  0 Idle: 0.0% 
    CPU  1 Idle: 0.0% 
    Memory: 0 total, 1G avail, page size 4K
    PID   TID PRI STATE HH:MM:SS CPU  COMMAND
    704585 11  10  Run   0:01:52 24.82% App
    704585 10  10  Rdy   0:01:52 24.68% App
    704585 13  10  Rdy   0:01:52 24.53% App
    704585 16  10  Rdy   0:01:49 24.19% App

2 个答案:

答案 0 :(得分:0)

准备好的线程在消耗CPU时处于运行状态。鉴于CPU值非常相似,我敢打赌所有这些线程都可以随时运行或运行。

答案 1 :(得分:0)

处于RUNNING状态的线程是当前当前消耗CPU的唯一线程,但处于READY状态的线程是那些有资格在一段时间内消耗CPU的线程。

您的处理器有两个内核,因此最多可以同时运行两个线程。任何数字都可以是READY(即未阻塞和可运行,但不一定在核心上当前正在执行),并且这些数字将根据适用的优先级和调度方法运行。由于您正在查询进程管理器的线程状态,因此该实例中的一个核心显然会在进程管理器中运行一个线程。另一个核仍将在系统中的一组未阻塞线程中运行可用的READY线程,同样基于优先级和调度算法。这就是为什么你的四个线程中只有一个显示为正在运行,而其他线程只是READY。其他三个线程都是READY意味着,假设它们与其他当前运行的线程具有相同的优先级,则调度程序将根据您使用的调度算法在可用内核上运行这些线程,只要没有更高的优先级线程是或变为READY。线程状态反映了在要求进程管理器从内核提供线程状态信息时的瞬时状态,而使用状态反映了随时间的活动而不是瞬时状态。在很短的时间内,如果你有四个循环线程都是READY并且运行循环的优先级相同,那么你会看到四个线程中每个线程的利用率接近25%。但是如果你只有两个内核,那么在任何一个瞬间只有两个可以运行,如果你真的忙着获得有关线程状态的信息,那么这两个可用内核中的一个正在忙着抓取这些信息,你只会看到一个处于RUNNING状态的其他线程。如果您使用的是QNX,我建议您阅读并记住系统架构手册(http://www.qnx.com/download/feature.html?programid=26183)。 CH。 2讨论线程生命周期和调度解决了这个问题。 希望有所帮助。