2009-04-18 102 views
6

前一段時間,我創建了一個關於naming conventions for threads的SO問題。問題是,「你應該怎樣命名一個線程?」線程名稱 - 你什麼時候需要了解它們?

回想一下,如果您必須讀取線程的名稱,則線程名稱才重要。

你能提供當你不得不檢查線程和它們之間的辨別,依靠他們的名字的真實世界的例子?這是平臺/框架不可知的。

怎麼(在什麼環境中),你做了這個?

換言之,在什麼情況下你必須解決一個問題,必須檢查線程名稱,你是怎麼做到的?

+4

一般來說,線程名稱實際上只對記錄和調試有用。 – 2009-04-18 06:52:12

+0

好的,具體來說,您是如何使用線程名稱進行日誌記錄或調試的?什麼日誌記錄或調試機制告訴你一個線程的名字,這對你有什麼幫助? – core 2009-04-18 07:13:55

回答

3

當尋找的java連接泄漏,它是跟蹤的對象回來看看哪個線程它是由創建有時是有用的。在我們的例子中,它是Finalizer線程。這導致我們得出的結論是,事情正在被垃圾收集,但沒有被確定得足夠快。即一堆東西正在等待完成,這一切都是在一個線程中完成的。

因此,我們瞭解了一個關於不依賴Finalize的教訓。

0

這是相當經常真的有用的線程轉儲的生產服務器,以確定掛起/減速的原因。在這種情況下,通常會有不同角色的大量線程。在Java應用程序中,您可能正在查看石英線程以及應用程序用於建立性能保證的可能不同的線程池。可以說,線程池名稱通常比實際線程名稱更重要,但如果您試圖識別死鎖線程,則單個線程名稱也可能很重要。由於線程通常有一個名稱來表明它的作用,所以它有助於理解正在發生的事情。

1

有時在Java EE應用服務器,它是能夠跟蹤在單個線程上的所有活動很有用,而這些通常給由池子系統,如合適的名稱。 'http-25','http-12'等。

2

這個問題目前標有'Linux的沒有明顯的原因...無論如何,如果你正在使用Visual Studio,線程名稱出現在調試器中的線程窗口,因此,如果您正在調試的應用通過大量的線程,這個名稱使得在調試器的這個窗口中非常容易地找到'你關心的線程'。

總之,我是因爲它與調試工具很好地進行交互只是用它。

0

我使用的線程名稱,以幫助調試與OROCOS工具鏈寫一個多線程的機器人控制應用的實時性能。每個組件都在一個單獨的線程中運行,我將編寫使用通用工具來管理線程的優先級以及它們在哪些內核上運行的外殼腳本(從而間接地指出哪些線程搶佔了其他線程,以及何時)。這樣做的好處在於,您可以在程序運行時調整程序的性能,如果您還需要調整連續輸出的性能指標,那麼這非常有用。

相關問題