2009-04-18 58 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工具链写一个多线程的机器人控制应用的实时性能。每个组件都在一个单独的线程中运行,我将编写使用通用工具来管理线程的优先级以及它们在哪些内核上运行的外壳脚本(从而间接地指出哪些线程抢占了其他线程,以及何时)。这样做的好处在于,您可以在程序运行时调整程序的性能,如果您还需要调整连续输出的性能指标,那么这非常有用。

相关问题