Утилита идентификации потоков

Разработка утилиты идентификации потоков (в оригинале Thread Fingerprint Utility — TFU) работая по контракту с Photuris Inc. Она нужна для решения довольно специфичной проблемы — как определить чем занят определённый поток из множества потоков одного процесса?

Проект начался с телефонного разговора, звучавшего на первый взгляд, вполне обычно:
«У нас проблема с одним из потоков, который выполняется с высоким приоритетом.»
«ОК, что это за поток?»

В чем именно проблема, стало ясно как только я услышал ответ: «Это поток номер 8 процесса io-net.»

Проблема заключалась в том, что io-net является процессом, который запускает кроме нескольких своих потоков еще по одному потоку на каждую загруженную по запросу динамическую библиотеку (DLL). Это осложняет и без того непростую ситуацию потому что можно было бы использовать pidin чтобы проверить, что поток 8 работает с высоким приоритетом 22 и занимает много процессорного времени, но узнать за что конкретно отвечает этот поток не представлялось возможным. Простейшим решением было бы использование printf() для печати ID каждого потока при его старте, но это не сработало бы в общем случае, так как потребовало бы написание отдельной утилиты для сбора этих данных ото всех потоков, запущенных в системе, включая динамически порождаемые потоки, и дальнейшего анализа этой информации когда потребуется.

Добавить комментарий