2009-04-18 10 views
6

Ho creato una domanda SO su naming conventions for threads qualche tempo fa. La domanda era qualcosa del tipo, "Come dovresti nominare un thread?"Nome discussione: quando è necessario conoscerli?

Guardando indietro, un nome di filo che conta solo se si dispone di leggere il nome di un thread.

Potete fornire esempi reali di quando hai avuto per esaminare le discussioni e discernere tra di loro, basandosi sui loro nomi? Questo è indipendente dalla piattaforma/dal framework.

Come (in quale ambiente), hai fatto questo?

In un altro modo, in quali scenari è stato necessario risolvere un problema e ha dovuto esaminare i thread per nome e come è stato eseguito?

+4

generalmente i nomi dei thread sono in realtà utili solo per la registrazione e il debug. –

+0

Ok, quindi, in che modo, in particolare, usi il nome di un thread per la registrazione o il debug? Quali meccanismi di registrazione o debug ti dicono il nome di un thread e come ti aiuta? – core

+0

Questo non è indipendente dalla piattaforma. Non è possibile denominare i thread sotto Windows. –

risposta

3

Quando alla ricerca di eventuali perdite di connessione in Java, a volte è utile per tracciare un oggetto indietro per vedere quale thread è stato creato da. Nel nostro caso, era il thread di Finalizer. Questo ci ha portato alla conclusione che le cose stavano raccogliendo i rifiuti, ma non essendo finalizzati abbastanza velocemente. un sacco di cose stavano aspettando di essere finalizzate, il che era tutto fatto in un thread.

Come risultato, abbiamo imparato una lezione sul non fare affidamento su Finalize.

+1

Sì, non affidarsi mai alla finalizzazione o ad alcun tipo di distruttore per ripulire le risorse critiche! –

0

È molto spesso davvero utile per eseguire dump di thread dei server di produzione per determinare le cause di blocchi/rallentamenti. In questo caso di solito ci sarà una grande quantità di discussioni in ruoli diversi. In un'applicazione java è possibile visualizzare thread in quarzo e, eventualmente, diversi pool di thread utilizzati da un'applicazione per stabilire garanzie di prestazioni. Probabilmente il nome del pool di thread è in genere più importante del nome effettivo del thread, ma i nomi dei singoli thread possono anche essere significativi se si sta tentando di identificare un thread con deadlock. Poiché i thread di solito hanno un nome che indica il suo ruolo, aiuta a capire cosa sta succedendo.

1

volte su application server Java EE, è utile essere in grado di rintracciare tutte le attività su un singolo thread, e questi di solito sono indicati nomi appropriati da parte del sub-sistema di pooling, ad es. 'http-25', 'http-12' e così via.

2

Questa domanda è attualmente contrassegnata con 'linux' senza alcun motivo apparente ... in ogni caso, se si utilizza Visual Studio, il nome del thread viene visualizzato nella finestra dei thread nel debugger, quindi se si esegue il debug di un'app con un sacco di thread, il nome rende super-facile trovare "il thread che ti interessa" in questa finestra del debugger.

In breve, mi basta usare perché interagisce bene con l'attrezzatura debugger.

0

sto usando nomi di thread per aiutare il debug delle prestazioni in tempo reale di un'applicazione di controllo del robot multithreaded scritto con la toolchain OROCOS. Ogni componente viene eseguito in un thread separato e scriverò script di shell che utilizzano strumenti generici per gestire le priorità dei thread e su quali core vengono eseguiti (e quindi, indirettamente, quali thread prelevano altri thread e quando). La cosa bella di farlo in questo modo è che puoi regolare le prestazioni del programma mentre è in esecuzione, il che è particolarmente utile se imposti anche una metrica delle prestazioni in uscita continua.

Problemi correlati