2017-03-17 16 views
8

I to stwierdzenie, które pochodziły z Goetz za Java współbieżności w praktyce:Temat lokalizację

Runtime narzut wątków na skutek przełączania kontekstu obejmuje składowania i odtwarzania kontekst wykonania, utrata miejscowości i czasu procesora spędzony planowanie wątków zamiast ich uruchamiania.

Co to jest "utrata miejsca"?

+4

Może [Miejscowość informacyjna] (https://en.wikipedia.org/wiki/Locality_of_reference)? – shmosel

Odpowiedz

8

Gdy wątek działa, często odczytuje dane z pamięci iz dysku. Dane są często przechowywane w sąsiadujących lub bliskich miejscach w pamięci/na dysku (na przykład podczas iteracji przez tablicę lub podczas odczytu pól obiektu). Sprzęt stawia na to, ładując bloki pamięci do szybkich pamięci podręcznych, dzięki czemu dostęp do sąsiednich/bliskich lokalizacji pamięci jest szybszy.

Gdy masz dużą liczbę wątków i przełączasz się między nimi, te pamięci podręczne często muszą być przepłukiwane i ponownie ładowane, co sprawia, że ​​kod wątku zabiera więcej czasu niż gdyby był wykonywany wszystkie naraz, bez konieczności przełącz się na inne wątki i wróć później.

Trochę jak my, ludzie potrzebują trochę czasu, aby wrócić do zadania, po czym przerwał, dowiedzieć się, gdzie jesteśmy, co robimy, itd

1

Wystarczy rozwinąć punkt „bufor jest” złożony przez JB Nizet.

Gdy wątek działa na rdzeniu, przechowuje ostatnio używane dane w pamięci podręcznej L1/L2, które są lokalne dla rdzenia. Nowoczesne procesory zazwyczaj odczytują dane z pamięci podręcznej L1/L2 w około 5-7 ns.

Gdy po przerwie (od przerwania, wstawienia kolejki oczekiwania itp.) Wątek zostanie ponownie uruchomiony, najprawdopodobniej będzie działał na innym rdzeniu. Oznacza to, że pamięć podręczna L1/L2 tego nowego rdzenia nie ma danych związanych z pracą wykonywaną przez wątek. Teraz musi załadować pamięć główną (która zajmuje około 100 ns), aby załadować dane przed przystąpieniem do pracy.

Istnieją sposoby na złagodzenie tego problemu przez przypinanie wątków do określonego rdzenia za pomocą biblioteki powinowactwa wątku.