Jeśli aplikacja przekazuje około 700 bajtów wiadomości XML, które mogą być zawarte w 65-bajtowych komunikatach protokołu Google lub 85-bajtowych komunikatach ASN.1, prawdopodobnie to nie będzie miało znaczenia. Ale jeśli przetwarza milion razy na sekundę, to nie odrzucałbym kosztów dodawania 2 cykli pełnego odczytu do modyfikacji zapisu (RMW) do przejścia wskaźnika.
Pełny odczyt zmodyfikować zapisu jest rzędu 50 ns, więc dwa jest 100 ns. Koszt ten jest kosztem zamka i zamknięcia-dek - taki sam jak 2 CAS. Jest to połowa rezerwy i wydania sekcji krytycznej systemu Windows.Jest to porównywane z jednym naciśnięciem cyklu maszynowego (400 PICO sekund na maszynie 2,5 GHz).
Nie obejmuje to również innych kosztów związanych z unieważnieniem linii pamięci podręcznej, która faktycznie zawiera licznik, skutków blokady magistrali BUS na innych procesorach itp.
Przekazywanie inteligentnych wskaźników przez odniesienie do stałych jest prawie ZAWSZE preferowane. Jeśli użytkownik nie utworzy nowego współdzielonego wskaźnika, gdy chce zagwarantować lub kontrolować - czas życia pointee , to jest to błąd w kamerze. Chcąc nie chcąc przechodzić do bezpiecznego wątku, licząc inteligentne wskaźniki wokół wartości, wystarczy zapytać o trafienia wydajnościowe.
Używanie odnośników zliczanych wskaźników upraszcza życie bez wątpienia, ale przekazywanie dzielonych wskaźników przez wartość, aby próbować chronić się przed wadami w kręgu jest czystym i kompletnym nonsensem.
Nadmierne korzystanie z licznika referencyjnego może w krótkim czasie zamienić uproszczony program, który może przetwarzać 1mm wiadomości na sekundę (mps) na gruby, który obsługuje 150k/s na tym samym sprzęcie. Nagle potrzebujesz pół szafy serwerów i 10000 USD/rok energii elektrycznej.
Zawsze lepiej sobie radzisz, jeśli możesz zarządzać życiem obiektów bez liczenia referencji.
Przykładem prostego ulepszenia jest, powiedzmy, czy masz zamiar rozchodzić się po obiekcie i znasz szerokość fanouta (powiedzmy n) przyrostu, a raczej indywidualny przyrost przy każdym fanoucie.
BTW, gdy procesor widzi prefiks blokady, naprawdę mówi "nie, to boli".
Wszystko to, co się mówi, zgadzam się z każdym, że powinieneś zweryfikować hot spot.
Heh. Brak odpowiedzi tutaj, ale po prostu uwielbiałem sposób, w jaki tytuł został sformułowany. Wyobrażam sobie procesor wykonujący instrukcje wesoło, kiedy nagle widzi on instrukcję współdzielonego wskaźnika na końcu potoku. "O nie, to będzie huuuuurt ...... OW!" –
Co sprawia, że problem polega na udostępnianiu wskaźników? –
Mając ludzi mówiących, że marnują czas procesora, to jest to: P – Guest