0

我使用 pthread lib 2.8,操作系统内核是 arm 上的 Linux 2.6.37。sched_get_priority_min(policy)在我的程序中,线程 A 使用 pthread 接口将调度优先级设置为和之间的中间点sched_get_priority_max(policy)

在线程函数循环中:

{
    //do my work
    pthread_cond_timedwait(..., ... , 15 ms)
}

我发现这个线程消耗大约 3% 的 CPU。如果我将超时更改为 30 毫秒,它会减少到 1.3%。但是,我不能增加超时。有没有办法在不减少超时的情况下减少 CPU 消耗?看来成本是由于线程切换造成的。

4

1 回答 1

0

使用这种结构将导致每秒大约 67 次任务切换,并且很可能切换到不同的进程,这意味着包括页表在内的完整上下文切换。自从我研究 ARM 中涉及的内容以来已经有一段时间了,但我确信这不是“轻量级”操作。如果我们倒数,其中 1.75% 是每个任务切换大约 210k 个时钟周期。这似乎很多。但我不确定清理 TLB、缓存等涉及多少工作。

于 2013-05-14T10:13:57.563 回答