mi pregunta es por qué utilizar el mecanismo TLS en lugar de solo variables locales en una función de subproceso? ¿Puedes dar algún buen ejemplo, o cuál es la ventaja de TLS sobre los vars locales? Gracias, Mateuszpor qué utilizar el Thread Local Storage (TlsAlloc, TlsGetValue, ets) en lugar de las variables locales
Respuesta
TLS es útil para cosas como la información de contexto de la sesión de usuario que es específica de la secuencia, pero podría usarse en varios métodos no relacionados. En tales situaciones, TLS es más conveniente que pasar la información arriba y abajo de la pila de llamadas.
Thread-local storage se puede usar para emular variables globales o estáticas por subprocesos. Las variables locales "normales" no pueden.
y lo que me da tener una variable global que sea específica del subproceso? –
Puede dar f.e. Lo que mishmashru menciona – str14821
Si puede usar variables locales, hágalo e invariablemente puede usar locales. Solo como último recurso, debe usar el almacenamiento local de subprocesos que tiene casi todas las mismas desventajas que las variables globales. Aunque está buscando una razón para usar el almacenamiento local de subprocesos, de hecho, la mejor práctica es buscar formas de evitarlo.
Aquí es buen enlace de Intel sobre el uso de almacenamiento local de subprocesos para reducir Sincronización: https://software.intel.com/en-us/articles/use-thread-local-storage-to-reduce-synchronization
Me salteé esta publicación pero lea este artículo más adelante. Mal movimiento, buen artículo! – Seralize
Conozco a un muy buen ejemplo de la utilización de TLS. Cuando está implementando LIBC o transfiriendo una de las variantes de LIBC a la nueva plataforma, necesita de alguna manera la variable 'errno' (que en la plataforma de un único subproceso es simplemente extern int errno) para ser única para cada subproceso. Las funciones LIBC simplemente lo almacenan en TLS del hilo actual y una llamada a errno solo lo lee desde TLS. TLS es la manera de hacer que cualquier hilo de biblioteca sea seguro. Usted almacena cualquier tipo de datos 'estáticos' o 'globales' en TLS, por lo que la misma función que se llama desde otro hilo no corromperá sus variables 'estáticas' o 'globales' en otro hilo. Lo que hace que las funciones re ingresen de diferentes hilos.
¡Buen punto hermano! Ni siquiera sabía eso. – str14821
- 1. Variables locales en bash: local vs subshell
- 2. ¿Por qué C# vincula las variables locales por adelantado?
- 3. Las variables locales en las definiciones de clase/ámbito
- 4. acceso todas las variables locales
- 5. Mecanografía implícita; ¿por qué solo variables locales?
- 6. ¿Por qué las variables locales tienen valores iniciales?
- 7. sincronizados y locales copias de las variables
- 8. ¿Por qué las variables no son locales en las sentencias de caso?
- 9. ¿Por qué hay variables locales en el bytecode de IL basado en la pila
- 10. Variables locales en java
- 11. Phonegap local storage
- 12. ¿Cómo declarar las variables locales en postgresql?
- 13. las variables Constructor-locales en Scala
- 14. Las variables locales en el código de bytes de Java
- 15. Google chrome extension: local storage
- 16. Imprimir todas las variables globales/variables locales?
- 17. ¿Por qué tengo esta InstantiationException en Java cuando accedo a las variables locales finales?
- 18. Cómo acceder a las variables locales dinámicas
- 19. ¿Por qué las variables locales, incluidas las primitivas, siempre deben inicializarse en Java?
- 20. empujar variables locales
- 21. Variables locales en las funciones anidadas de Python
- 22. ¿Por qué utilizar campos en lugar de propiedades?
- 23. ¿Dónde se almacenan las variables locales finales de Java?
- 24. ¿Cómo se definen las variables estáticas locales locales de subprocesos?
- 25. ¿Cómo sabe el compilador mover las variables locales?
- 26. Javadoc para variables locales?
- 27. ¿Por qué utilizar JOIN en lugar de consultas internas
- 28. ¿Por qué utilizar EventArgs.Empty en lugar de null?
- 29. ¿Por qué utilizar jQuery en() en lugar de clic()
- 30. variables estáticas locales y globales en C++
cuando tengo varias funciones llamadas desde una función de subprocesos y todas usan los mismos datos, entonces utilizo TLS solo para no pasar los datos a través de la pila, ¿sí? –
Sí. Por ejemplo, si se requiere en varios puntos del código para conocer al usuario conectado, es más fácil almacenar esa información en TLS dentro de un singleton en lugar de pasar el usuario conectado a cada método. – btreat
su comprensión es correcta, pero el análisis en la pila es mucho mejor –