Каков наилучший способ понять и проанализировать многопоточный код? - PullRequest
0 голосов
/ 08 июня 2018

Я не ищу методы программирования.Мой вопрос скорее о том, как лучше понять код, разработанный третьей стороной.

У меня есть код для приложения на определенном языке (это может быть C / C ++, Java и т. Д.),Этот код использует несколько потоков для управления различными процессами.Приложение генерирует журнал, который показывает все вызовы соответствующих функций для каждого потока.

Я должен проанализировать этот код, чтобы понять его работу и иметь возможность усовершенствовать алгоритм.Я мало работал с потоками, поэтому я не знаю, какой самый удобный способ запустить анализ и следить за выполнением каждого потока.

Не могли бы вы дать мне какую-нибудь рекомендацию?

1 Ответ

0 голосов
/ 09 июня 2018

Если вы можете связаться с любым из первоначальных разработчиков кода, поговорить с ними (по голосу или по электронной почте) и попросить их описать, как они должны работать, всегда лучше, чем пытаться перепроектировать их.намерение, глядя на код.Если вы не можете связаться с разработчиками напрямую, то, возможно, существует форум разработчика библиотеки или другой онлайн-ресурс, где вы можете обсудить структуру библиотеки с людьми, которые имеют опыт ее использования / отладки.

Еслиэто не вариант (или если вы сделали это и все еще не чувствуете, что понимаете что-то достаточно хорошо), то я часто нахожу это профилирование (либо с помощью инструмента профилирования, либо просто путем временного ввода printf() [или подобного] отслеживание вызовов в кодовой базе в разных местах и ​​просмотр того, что печатается, когда) - это хороший способ узнать, какие части кода фактически используются на каких этапах выполнения программы.Это поможет вам подтвердить (или опровергнуть) ваши теории о том, как работает кодовая база.Знание, где и когда создается каждый поток, где находится его функция входа и где / когда он снова соединяется с родительским потоком, особенно полезно.

Наконец, начните смотреть на различные фрагменты данных (например,объекты и переменные-члены) каждый поток проверяет и / или изменяет, и как синхронизируется / сериализуется доступ к каждому из этих фрагментов данных.Предполагая, что код не содержит ошибок, критические разделы базы кода являются хорошими индикаторами того, где происходит межпотоковая связь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...