命名线程是有帮助的,这样就可以理清哪些线程正在做什么用于诊断和调试。
多线程应用程序中的线程是否有特定的命名约定?任何准则?什么样的信息应该进入线程的名称?你有什么关于命名你的线程的知识可能对其他人有帮助吗?
答案 0 :(得分:39)
据我所知,没有标准。随着时间的推移,我发现这些指南很有帮助:
使用短名称,因为它们不会使日志文件中的行太长。
创建重要部分位于开头的名称。图形用户界面中的日志查看器往往具有包含列的表,并且线程列通常很小,或者您将变小以阅读其他内容。
不要在线程名称中使用“thread”一词,因为它很明显。
使线程名称容易grep-able。避免类似的发声线程名称
如果您有多个具有相同性质的线程,请使用一次执行应用程序唯一的ID或一个日志文件枚举它们,以适合您的日志记录习惯为准。
避免像“WorkerThread”这样的概括(你如何命名接下来的5个工作线程?),“GUIThread”(哪个GUI?用于一个窗口?用于所有东西?)或“计算”(它是什么)计算?)。
如果您的测试组使用线程名来grep应用程序的日志文件,请不要在一段时间后重命名您的线程。你的测试人员会讨厌你这样做。经过充分测试的应用程序中的线程名称应该留在那里。
当您拥有为网络连接提供服务的线程时,请尝试在线程名称中包含目标网络地址(例如channel_123.212.123.3)。如果有多个连接到同一主机,请不要忘记枚举。
如果你有很多线程但忘记命名,你的日志机制应该输出一个唯一的线程ID(特定于API,例如通过调用pthread_self())
答案 1 :(得分:2)
命名线程很有用,您应该遵循其他任何命名约定,即变量,方法或类。根据他们的行为命名并简明扼要。如果您遇到需要线程转储的问题,那么查看名称并知道在代码中查找问题的位置会更好,而不是检查堆栈跟踪和猜测。
唯一不同的是,如果有多个相同类型的线程,您确实应该添加某种索引,因为线程名称应该是唯一的,以满足某些API。如果您显示线程名称以了解应用程序在不同线程上发生部分执行的行为,它也可以帮助进行日志记录。
答案 2 :(得分:2)
您打算使用线程池吗?如果是,那么这将减少您添加更多有用元信息的机会。如果没有,天空是你可以获得多少有用信息的限制。
答案 3 :(得分:1)
怎么样:
[namespace]。[Class] [.Class ...]。[Method] [当前线程]?
所以你有这些名字:
Biz.Caching.ExpireDeadItems1
Biz.Caching.ExpireDeadItems2
Biz.Caching.ExpireDeadItems3
等,每个帖子。
答案 4 :(得分:0)
嗯...在我编写的大量多线程应用程序中,我通常有多个线程执行相同的功能,所以我不确定命名线程在这种情况下是非常有用的。也就是说,我确实为每个线程分配了一个整数ID,该ID在线程生成的日志消息中打印,以帮助调试。
对于其他具有专用独特职责的线程的应用程序,是的我用它描述性地命名了......但我没有这样做,因为它是一个线程应用程序,我这样做是因为它是一个编码最佳实践
答案 5 :(得分:0)
我倾向于将命名线程与命名方法或变量相同。选择一些简洁描述线程负责的过程的东西。我不认为你可以或应该在线程名称中添加很多额外信息。表达但简洁是主要目标。
唯一的约定可能是将增加的后缀添加到属于池的线程中。
答案 6 :(得分:0)
我在.NET中看到了几个线程的命名约定。
有些人更喜欢在名称的开头使用't'(例如 tMain Thread ),但我认为它没有任何实际价值。 相反,为什么不使用简单的描述性名称(行变量),例如 HouseKeeping , Scheduler 等。