2009-04-18 2 views
6

얼마 전에 naming conventions for threads에 대한 SO 질문을 만들었습니다. 문제는 "어떻게 스레드에 이름을 붙이겠습니까?"스레드 이름 - 언제 알 필요가 있습니까?

다시 보면 스레드 이름은 스레드 이름을 읽어야 만 문제가됩니다.

스레드를 검사하고 이름을 사용하여 스레드를 확인해야 할 때의 실제 예를 제공 할 수 있습니까? 이것은 플랫폼/프레임 워크에 독립적입니다.

어떻게 (어떤 환경에서)이 작업을 수행 했습니까?

어떤 시나리오에서 문제를 해결해야하고 스레드 으로 검사해야했는데이를 어떻게 수행 했습니까?

+4

일반적으로 스레드 이름은 로깅 및 디버깅에만 유용합니다. –

+0

좋아, 그럼, 구체적으로 어떻게 로깅이나 디버깅을 위해 스레드 이름을 사용합니까? 스레드의 이름을 알려주는 로깅 또는 디버깅 메커니즘은 무엇이며 어떻게 도움이됩니까? – core

+0

이것은 플랫폼에 구애받지 않습니다. Windows에서는 스레드의 이름을 지정할 수 없습니다. –

답변

3

java에서 연결 누수를 찾을 때 객체를 추적하여 생성 된 스레드를 확인하는 것이 유용 할 때가 있습니다. 이 경우 Finalizer 스레드였습니다. 이로 인해 가비지 수집이 완료되었지만 충분히 빨리 마무리되지 않은 것으로 결론 내릴 수있었습니다. 즉, 한 묶음의 물건이 마무리되기를 기다리고있었습니다.

결과적으로 Finalize에 의존하지 않는 것에 대한 교훈을 얻었습니다.

+1

예, 중요한 리소스를 정리하기 위해 소멸자 또는 종결에 의존하지 마십시오! –

0

실제로는 은 실제 서버의 스레드 덤프를 수행하여 응답이 지연되는 원인을 확인하는 데 유용합니다. 이 경우 대개 서로 다른 역할의 많은 양의 스레드가있게됩니다. 자바 응용 프로그램에서는 쿼츠 스레드와 응용 프로그램이 성능 보증을 설정하는 데 사용할 수있는 다른 스레드 풀을 볼 수 있습니다. 대체로 스레드 풀 이름은 실제 스레드 이름보다 중요하지만 교착 상태의 스레드를 식별하려는 경우 개별 스레드 이름도 중요 할 수 있습니다. 스레드는 일반적으로 역할을 나타내는 이름을 가지고 있기 때문에 상황을 이해하는 데 도움이됩니다.

1

때때로 Java EE 응용 프로그램 서버에서는 단일 스레드에서 모든 활동을 추적 할 수있는 것이 유용하며 일반적으로 풀링 하위 시스템에서 적절한 이름이 부여됩니다. 'http-25', 'http-12'등이 있습니다.

2

이 질문에 'linux'태그가 지정되지 않았습니다. 어쨌든 Visual Studio를 사용하는 경우 스레드 이름이 디버거의 스레드 창에 표시되므로 앱을 디버깅하는 경우 수많은 스레드가 있기 때문에 디버거에서이 창에서 '관심있는 스레드'를 찾는 것이 매우 쉽습니다.

요약하면 디버거 도구와 잘 작동하기 때문에 사용합니다.

0

나는 스레드 이름을 사용하여 Orocos toolchain으로 작성된 다중 스레드 로봇 제어 응용 프로그램의 실시간 성능을 디버깅하는 데 도움이됩니다. 각 구성 요소는 별도의 스레드에서 실행되며 일반 목적의 도구를 사용하여 스레드의 우선 순위와 코어를 관리하는 쉘 스크립트를 작성할 것입니다 (간접적으로 다른 스레드를 선점하는 스레드와시기). 이 방법을 사용하면 프로그램이 실행되는 동안 프로그램의 성능을 조정할 수 있다는 장점이 있습니다. 이는 지속적으로 출력되는 성능 메트릭을 조정할 때 특히 유용합니다.

관련 문제