簡體   English   中英

線程的命名約定?

[英]Naming conventions for threads?

命名線程是有幫助的,這樣就可以理清哪些線程正在做什么用於診斷和調試目的。

在多線程應用程序中,線程是否有一個特定的命名約定,它比另一個更好? 任何准則? 什么樣的信息應該進入線程的名稱? 你有什么了解如何命名你的線程可能對其他人有幫助?

據我所知,沒有標准。 隨着時間的推移,我發現這些指南很有幫助:

  • 使用短名稱,因為它們不會使日志文件中的行太長。

  • 創建重要部分位於開頭的名稱。 圖形用戶界面中的日志查看器往往具有包含列的表,並且線程列通常很小,或者由於您要讀取其他內容而變小。

  • 不要在線程名稱中使用“thread”一詞,因為它很明顯。

  • 使線程名稱容易grep-able。 避免類似的發聲線程名稱

  • 如果您有多個具有相同性質的線程,請使用對應用程序執行或一個日志文件唯一的ID枚舉它們,以適合您的日志記錄習慣為准。

  • 避免像“WorkerThread”這樣的概括(你如何命名接下來的5個工作線程?),“GUIThread”(哪個GUI?是一個窗口?對於一切?)或“計算”(它計算什么?)。

  • 如果您有一個使用線程名稱來測試應用程序日志文件的測試組,請不要在一段時間后重命名您的線程。 你的測試人員會討厭你這樣做。 經過充分測試的應用程序中的線程名稱應保留。

  • 當您擁有為網絡連接提供服務的線程時,請嘗試在線程名稱中包含目標網絡地址(例如channel_123.212.123.3)。 如果有多個連接到同一主機,請不要忘記枚舉。

如果您有許多線程而忘記命名一個,那么您的日志機制應該輸出一個唯一的線程ID(特定於API,例如通過調用pthread_self())

命名線程很有用,您應該遵循其他任何命名約定,即變量,方法或類。 根據他們的行為命名並簡明扼要。 如果您遇到需要線程轉儲的問題,那么查看名稱並知道在代碼中查找問題的位置會更好,而不是檢查堆棧跟蹤和猜測。

唯一不同的是,如果存在多個相同類型的線程,您應該添加某種索引,因為線程名稱應該是唯一的,以滿足某些API。 如果您顯示線程名稱以了解應用程序在不同線程上發生部分執行的行為,它也可以幫助進行日志記錄。

雖然Thorsten的答案是最全面的,但您可能想看看Tomcat如何命名其Threads。 我發現這很有用。 我們使用石英調度程序運行多個線程,並且Thorsten建議的許多命名規則都很有用。

你打算使用線程池嗎? 如果是,那么這將減少您添加更多有用元信息的機會。 如果沒有,天空是你可以擁有多少有用信息的限制。

關於什么:

[namespace]。[Class] [.class ...]。[方法] [當前線程]?

所以你有這些名字:

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

等,每個線程。

嗯...在我編寫的大量多線程應用程序中,我通常有多個線程執行相同的功能,所以我不確定命名線程在這種情況下是非常有用的。 也就是說,我確實為每個線程分配了一個整數ID,該ID在線程生成的日志消息中打印,以幫助調試。

對於其他具有專用獨特職責的線程的應用程序,是的,我用描述性地命名它們......但我沒有這樣做,因為它是一個線程應用程序,我這樣做是因為它是一個編碼最佳實踐。

我傾向於將命名線程與命名方法或變量相同。 選擇一些簡潔描述線程負責的過程的東西。 我不認為你可以或應該在線程名稱中添加很多額外信息。 表達但簡潔是首要目標。

唯一的約定可能是將增加的后綴添加到屬於池的線程中。

我在.NET中看到了幾個線程的命名約定。

有些人更喜歡在名字的開頭使用't'(例如tMain Thread ),但我認為它沒有任何實際價值。 相反,為什么不使用簡單的描述性名稱(行變量),如HouseKeepingScheduler等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM