一、背景
之前的博客 https://zhaoxin1989.blog.csdn.net/article/details/145066795 和 https://zhaoxin1989.blog.csdn.net/article/details/146482124 里,我们讲到了D状态的任务的超时事件及相关堆栈的抓取。在抓取D状态的任务时遇到一些奇怪的现象,就是感觉抓取到了不少事件的误报,所以,我们增加了在触发超时时间的同时,也触发一下trace的抓取,通过perfetto来查看后发现,确实有一些事件在perfetto里的唤醒关系里是看不到的,在原始trace文件里能看到,但是任务在被唤醒时也是在跑的。
在这篇博客里,我们在第二章里展示发现的这个问题的具体细节,并阐述相关原理。
在第三章里,我们把第二章里分析到的一些具体细节拿出来抽象出一定可以借鉴的编码技巧。