Ho intenzione di utilizzare l'id del thread corrente in un posto molto critico sul mio codice, quindi dovrei scegliere se mettere da parte l'id da qualche parte o chiamare un metodo (gettid
per sistemi unix e GetCurrentThreadId
per windows) per averlo sempre Quindi quale è meglio? L'ID del thread sta ricevendo una chiamata di sistema?L'operazione di ottenere l'id del tempo di thread corrente è costosa?
risposta
No, non è una chiamata costosa. È una chiamata di sistema o simile, ma lontana da una costosa. Ovviamente, se è possibile memorizzare il valore in una variabile semplice, sarà più rapido di un fattore 10.
Ma come tutte le query relative alle prestazioni, è davvero il tuo benchmarking. Puoi facilmente impostare le cose per usare un singolo thread, chiamare la funzione per ottenere l'ID del thread e fare ciò che vuoi fare. Misura quanto tempo ci vuole per eseguire un test con questo. Quindi sostituire la chiamata per l'ID thread con un valore costante nello stesso intervallo e vedere come funziona.
Almeno in Windows, GetCurrentThreadId()
è piuttosto economico e non comporta una chiamata di sistema. In pratica funziona fuori a:
int GetCurrentThreadId() {
_asm {
mov eax, fs:[18h]
mov eax, [eax+24h]
}
}
Ci potrebbe essere un po 'vantaggio per la memorizzazione nella cache il valore in una variabile, ma non molto. Il vantaggio principale sarebbe probabilmente se memorizzate la vostra variabile insieme ad altre variabili usate di frequente, che potrebbero migliorare la località (e quindi l'utilizzo della cache).
Quindi, a meno che non si stia lavorando su un ciclo così stretto che la possibilità di eliminare un recupero di memoria (o forse due) è significativa, è improbabile che si guadagni molto memorizzando il valore restituito.
- 1. DbContext è un'operazione costosa?
- 2. Ottenere il tempo di esecuzione di un thread java
- 3. come ottenere il tempo di riproduzione corrente in video.js
- 4. Powershell Set Lid Close Azione
- 5. Stat() è una chiamata di sistema costosa?
- 6. Delphi - regolazione del tempo di sospensione del thread
- 7. HibernateException: Impossibile ottenere sessione di transazione sincronizzata per thread corrente
- 8. HibernateException: Impossibile ottenere sessione di transazione sincronizzata per thread corrente
- 9. CABasicAnimation corrente tempo trascorso
- 10. Context.getSystemService() è una chiamata costosa?
- 11. Perché l'impaginazione è così costosa?
- 12. Come ottenere l'ID del thread da un pool di thread?
- 13. Verificare se il thread corrente è thread principale, in Python
- 14. Ottenere corrente URL del browser
- 15. Verificare se il thread corrente è il thread principale
- 16. Qual è il significato del tempo di overhead della concurrent thread nell'output del profiler?
- 17. Manutenzione costosa con dati di test automatizzati
- 18. Qual è il tempo di vita di un valore locale del thread in Python?
- 19. La creazione del socket è una procedura molto costosa?
- 20. Tomcat Conteggio thread corrente
- 21. Perché la chiamata al metodo Java è così costosa qui?
- 22. Come ottenere il tempo corrente in millisecondi in C Programming
- 23. Complessità del tempo di random.sample
- 24. Come ottengo il tempo di riproduzione corrente e il tempo di riproduzione totale in AVPlayer?
- 25. Quanto più costosa è un'eccezione che un valore di ritorno?
- 26. SQLite è la dichiarazione CASE costosa?
- 27. Ottenere l'elemento corrente del ciclo itertools di python
- 28. Utilizzo di nomeof per ottenere il nome del metodo corrente
- 29. Ottenere l'ID del controller corrente in Yii
- 30. Ottenere il nome del modulo corrente
Ho visto Unix (es) fare lo stesso (ma con gs, non che importi). Quindi la tua risposta è corretta per più piattaforme. È molto economico – boiler96