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

有很多黄色和紫色,紫色对应于“抢占”和“主管”模式(全彩色图表在附加图像中弹出右上角)。鉴于我在这些状态下花了这么多时间,而不是“跑步”状态(蓝色),我会特别有兴趣了解他们所指的是什么以及是否有可能/是可能/可取的,以最小化这些状态所花费的时间。

有帮助吗?

解决方案

prememed=您的线程是可运行的,准备好,愿意和能够执行,但被踢出(上下文切换)支持一些其他线程。这意味着您的线程未在I / O或事件上睡觉,并且实际上正在执行CPU密集型的东西。然而,由于量子到期或更大优先级的一些其他线程,它被迫退出CPU。

supervisor=您的线程处于内核模式。通常情况下,这意味着内核正在为线程提供的系统调用。

他们都没有严格糟糕,但是:

避免抢占:您可以在此处做到,除了使用优先级 - 使用负面的优先价值,或者直接使用setPriority API来提高优先级。您还可以使用计划策略来提高线程的首选项,以及Cajole Mach Scheduler(线程的基础决策者)首先放置主题,并给予更多CPU时间。

避免主管模式:您可能会在系统调用中沉重。同样,这不一定是坏事。

希望这有帮助,

tg

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top