Соглашения об именах для потоков? - PullRequest
41 голосов
/ 29 сентября 2008

Полезно называть потоки, чтобы можно было выяснить, какие потоки делают для целей диагностики и отладки.

Существует ли особое соглашение об именах для потоков в многопоточном приложении, которое работает лучше, чем другое? Какие-нибудь рекомендации? Какая информация должна входить в название темы? Что вы узнали о присвоении имен темам, которые могут быть полезны другим?

Ответы [ 7 ]

39 голосов
/ 29 сентября 2008

Там, насколько мне известно, нет стандарта. Со временем я нашел эти рекомендации полезными:

  • Используйте короткие имена, потому что они не делают строки в файле журнала слишком длинными.

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

  • Не используйте слово «нить» в названии нити, потому что это очевидно.

  • делает имена потоков легко настраиваемыми. Избегайте похожих звучащих названий потоков

  • если у вас несколько потоков одинаковой природы, перечислите их с идентификаторами, которые уникальны для одного выполнения приложения или одного файла журнала, в зависимости от того, что соответствует вашим привычкам ведения журнала.

  • избегайте обобщений, таких как «WorkerThread» (как вы называете следующие 5 рабочих потоков?), «GUIThread» (какой GUI? Для одного окна? Для всех?) Или «Расчет» (для чего вычислить?).

  • если у вас есть тестовая группа, которая использует имена потоков для grep-файлов журнала вашего приложения, не переименовывайте ваши потоки через некоторое время. Ваши тестеры будут ненавидеть вас за это. Имена потоков в хорошо протестированных приложениях должны быть там, чтобы остаться.

  • если у вас есть потоки, обслуживающие сетевое соединение, попробуйте включить целевой сетевой адрес в имя потока (например, channel_123.212.123.3). Не забывайте о перечислении, если к одному хосту подключено несколько соединений.

Если у вас много потоков и вы забыли назвать одно, ваш механизм регистрации должен вывести уникальный идентификатор потока (специфично для API, например, путем вызова pthread_self ())

2 голосов
/ 29 сентября 2008

Хотя ответ Торстена является наиболее полным, вам может понадобиться посмотреть, как Tomcat называет свои потоки. Я нашел это полезным. Мы запускали несколько потоков с кварцевым планировщиком, и многие правила именования, которые, по словам Торстена, были полезны.

Собираетесь ли вы использовать пул потоков? Если да, то это уменьшит вероятность того, что вы сможете добавить больше полезной метаинформации. Если нет, то небо - это предел того, сколько полезной информации вы можете иметь.

2 голосов
/ 29 сентября 2008

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

Единственное отличие состоит в том, что если существует несколько потоков одного и того же типа, вам действительно следует добавить некоторый индекс, поскольку имена потоков должны быть уникальными для удовлетворения определенных API. Это также может помочь с ведением журнала, если вы показываете имя потока, чтобы знать, как ваше приложение ведет себя с частичным выполнением в разных потоках.

1 голос
/ 07 октября 2008

А как же:

[пространство имен]. [Класс] [. Класс ...]. [Метод] [текущий поток]?

Итак, у вас есть имена:

Biz.Caching.ExpireDeadItems1
Biz.Caching.ExpireDeadItems2
Biz.Caching.ExpireDeadItems3

и т. Д. Для каждой нити.

0 голосов
/ 08 октября 2008

Я видел несколько соглашений об именах для потоков в .NET.

Некоторые предпочитают использовать 't' в начале имени (например, tMain Thread ), но я не думаю, что оно имеет какое-либо реальное значение. Вместо этого, почему бы просто не использовать простые описательные имена (строковые переменные), такие как HouseKeeping , Планировщик и т. Д.

0 голосов
/ 29 сентября 2008

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

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

0 голосов
/ 29 сентября 2008

Хммм ... В написанных мною многопоточных приложениях у меня обычно было несколько потоков, выполняющих одну и ту же функцию, поэтому я не уверен, что именование потоков очень полезно в этом сценарии. Тем не менее, я назначил каждому потоку целочисленный идентификатор, который был напечатан в сообщениях журнала, сгенерированных этим потоком, чтобы помочь в отладке.

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

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