Подтвердить что ты не робот

Соглашения об именах для потоков?

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

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

4b9b3361

Ответ 1

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

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

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

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

  • сделать имена потоков легко grep-able. Избегайте подобных имен звуковых имен

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

Как насчет:

[namespace]. [Class] [. Class...]. [Method] [current thread]?

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

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

и т.д. для каждого потока.

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

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