3

我正在使用 Apple Instruments 工具对多线程应用程序进行一些分析,这些工具提供了很多我试图理解的信息。我试图找到一个很好的资源来描述工具中颜色编码的线程状态。我一直在研究 XNU Kernel 文档和书籍,但运气不佳。

有很多黄色和紫色对应于“抢占”和“监督”模式(全彩色图表在附图的右上角弹出中描述)。鉴于我在这些状态中花费了很多时间而不是“运行”状态(蓝色),我特别想知道它们指的是什么,以及是否有可能/希望尽量减少在这些状态中花费的时间.

在此处输入图像描述

4

1 回答 1

3

Preempted = 您的线程是可运行的,并且已经准备好、愿意并且能够执行,但被踢出(上下文切换)以支持其他线程。这意味着您的线程没有在 I/O 或事件上休眠,实际上是在做一些 CPU 密集型的事情。然而,由于量子到期或其他更高优先级的线程,它被强制退出 CPU。

主管 = 您的线程处于内核模式。通常,这意味着内核正在为您的线程进行的系统调用提供服务。

它们都不是严格意义上的坏事,但是:

避免抢占:除了使用您的优先级之外,您在这里无能为力 - 使用负的 nice 值增加您的优先级,或者直接使用 setpriority API。您还可以使用调度策略来提高线程的偏好,并哄骗 Mach 调度程序(线程的底层决策者)将您的线程放在首位,并为它们提供更多的 CPU 时间。

避免主管模式:您可能对系统调用很感兴趣。同样,这不一定是坏事。

希望这可以帮助,

TG

于 2012-10-18T01:09:54.173 回答