Wykorzystanie właściwości atomowych w Objective C: jakieś skutki uboczne?
Rozumiem, że znaczenie atomic
zostało wyjaśnione w Jaka jest różnica między atrybutami atomowymi i nieatomowymi?, ale chcę wiedzieć:
P. czy poza problemami z wydajnością wszędzie można zauważyć jakieś skutki uboczne w korzystaniu z właściwości atomowych?
Wydaje się, że odpowiedź brzmi nie, ponieważ wydajność iPhone ' a jest obecnie dość szybka. Dlaczego więc tak wiele osób wciąż używa non-atomic
?
Nawet atomic
nie gwarantuje bezpieczeństwa wątku, ale i tak lepsze to niż nic, prawda?
2 answers
Nawet atomic nie gwarantuje bezpieczeństwa nici, ale to i tak lepsze niż nic, prawda?
Wrong . Po napisaniu kilku naprawdę skomplikowanych programów współbieżnych, polecam dokładnie odwrotnie. Powinieneś zarezerwować atomic
Na czas, kiedy naprawdę ma to sens-i możesz nie w pełni to zrozumieć, dopóki nie napiszesz współbieżnych programów bez użycia atomic
. Jeśli piszę program wielowątkowy, nie chcę maskować błędów programistycznych (np. race warunki). chcę, aby kwestie współbieżności były głośne i oczywiste.W ten sposób łatwiej je zidentyfikować, odtworzyć i skorygować.
Przekonanie, żeniektóre bezpieczeństwo nici jest lepsze niżżaden jest wadliwe. Program jest albo threadsafe, albo nie. Korzystanie z atomic może sprawić, że te aspekty Twoich programów będą bardziej odporne na problemy związane z współbieżnością, ale to nie kupi ci zbyt wiele. Oczywiście, prawdopodobnie będzie mniej awarii, ale program jest nadal bezsprzecznie niepoprawne, i nadal wybuchnie w tajemniczy sposób. Moja rada: jeśli nie masz zamiaru poświęcać czasu na naukę i pisanie poprawnych programów współbieżnych, po prostu utrzymuj je w jednym wątku (jeśli brzmi to trochę surowo: nie ma być surowo - uratuje cię to od wielu bólów głowy). Wielowątkowość i współbieżność to ogromne, skomplikowane tematy - nauka pisania naprawdę poprawnych, długowiecznych programów w wielu dziedzinach zajmuje dużo czasu.
Oczywiście, atomic
można być używane do osiągnięcia threadsafety w niektórych przypadkach - ale uczynienie każdego dostępu atomowym gwarantuje nic dla bezpieczeństwa wątku. Ponadto, jest wysoce nietypowe (statystycznie), że same właściwości atomic
sprawią, że Klasa będzie naprawdę bezpieczna, szczególnie gdy złożoność klasy wzrasta; bardziej jest prawdopodobne , że klasa z jednym Ivarem jest naprawdę bezpieczna, używając tylko atomiki, w porównaniu z klasą z 5 ivarami. atomic
właściwości to cecha, z której korzystam bardzo rzadko (znowu niektóre ładne dużych baz kodowych i programów współbieżnych). To praktycznie narożna obudowa, jeśli atomika jest tym, co sprawia, że klasa jest naprawdę bezpieczna.
Blokady spinowe są jednymi z właściwości atomowych wdrożone. Czy chciałbyś synchronizację, taką jak spin lock lub mutex w domyśle otaczający każdy get I set, wiedząc, że nie gwarantuje to bezpieczeństwa wątku? Na pewno nie! Tworzenie dostępu do każdej nieruchomości w Twoich implementacjach może pochłonąć mnóstwo czasu procesora. Należy go używać tylko wtedy, gdy ma się do tego wyraźny powód(wspomniany również przez dasblinkenlicht+1). Szczegóły implementacji: niektóre dostępy nie wymagają blokad obrotowych, aby utrzymać Gwarancje atomic
; to zależy od kilku rzeczy, takich jak architektura i rozmiar zmiennej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-18 05:15:45
Nie powinieneś płacić za to, czego nie używasz. W przeciwieństwie do podłączonych komputerów, w których cykle CPU kosztują cię pod względem czasu, cykle CPU na urządzeniu mobilnym kosztują zarówno czas, jak i zużycie baterii. Jeśli aplikacja jest jednowątkowa, nie ma powodu, aby używać atomic
, ponieważ operacje blokowania i odblokowywania byłyby stratą czasu i baterii. Bateria jest ważniejsza niż czas: podczas gdy opóźnienie związane z dodaniem dodatkowych operacji może być niewidoczne dla użytkownika końcowego, spędzone cykle skracają czas pracy urządzenia mobilnego po jednym ładowaniu, co wielu użytkowników uważa za bardzo ważne.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-17 17:25:19