繁体   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