/ / dlaczego używać wątku Local Storage (TlsAlloc, TlsGetValue, ets) zamiast zmiennych lokalnych - wielowątkowość, pamięć masowa, lokalna, wątek lokalna

dlaczego używać wątku lokalnego magazynu (TlsAlloc, TlsGetValue, ets) zamiast zmiennych lokalnych - wielowątkowość, pamięć masowa, lokalna, pamięć lokalna wątku

moje pytanie brzmi: po co używać mechanizmu TLS zamiast tylko zmiennych lokalnych w funkcji wątku? Czy możesz podać dobry przykład lub jaka jest przewaga TLS nad lokalnymi wersjami? Dziękuję Ci, Mateusz

Odpowiedzi:

4 dla odpowiedzi № 1

TLS jest pomocny w przypadku sesji użytkownikainformacje kontekstowe, które są specyficzne dla wątku, ale mogą być wykorzystane w różnych niepowiązanych metodach. W takich sytuacjach TLS jest wygodniejszy niż przekazywanie informacji w górę iw dół stosu wywołań.


7 dla odpowiedzi nr 2

Jeśli możesz użyć zmiennych lokalnych, zrób to i tyniezmiennie mogą używać mieszkańców. Tylko w ostateczności należy używać lokalnej pamięci wątków, która ma prawie wszystkie te same wady co zmienne globalne. Chociaż szukasz powodu do korzystania z lokalnej pamięci wątków, w rzeczywistości najlepszą praktyką jest poszukiwanie sposobów, aby tego uniknąć!


3 dla odpowiedzi nr 3

Oto dobry link od Intela na temat korzystania z lokalnej pamięci masowej w celu zmniejszenia synchronizacji: https://software.intel.com/en-us/articles/use-thread-local-storage-to-reduce-synchronization


2 dla odpowiedzi № 4

Znam jeden bardzo dobry przykład użycia TLS. Kiedy wdrażasz LIBC lub przenosisz jeden z wariantów LIBC na nową platformę, potrzebujesz w jakiś sposób zmiennej „errno” (która na płycie jednowątkowej jest po prostu zewnętrzną int errno), aby była unikalna dla każdego wątku. Funkcje LIBC po prostu przechowują go w TLS bieżącego wątku, a wywołanie errno po prostu odczytuje go z TLS. TLS to sposób na zabezpieczenie dowolnego wątku biblioteki. Przechowujesz dowolny rodzaj danych „statycznych” lub „globalnych” w TLS, więc ta sama funkcja wywoływana z innego wątku nie uszkodzi twoich zmiennych „statycznych” lub „globalnych” w innym wątku. Co sprawia, że ​​masz dostęp do funkcji z różnych wątków.


1 dla odpowiedzi nr 5

Lokalna pamięć wątków może być używana do emulacji zmiennych globalnych lub statycznych dla poszczególnych wątków. „Normalne” zmienne lokalne nie mogą.