2012-04-10 15 views
8

ja oglądałem (2-letnia) Samouczek wideo na wielowątkowości który stwierdził, że@synchronized vs. NSLock Instance vs. pthread_mutex_t

  • NSLock instancja jest 3x szybciej niż przy użyciu @synchronized
  • pthread_mutex_t się 2x szybciej niż przykład NSLock (w praktyce 6x szybciej niż @synchronized)

Czy to prawda? Nie znalazłem niczego, co by stwierdziło z autorytetem, że tak jest, ale chciałem sondować niektórych z was na StackOverflow za waszą opinię i być może solidny dowód.

Dzięki!

Chociaż ja już zaakceptowane poprawną odpowiedź, przyszłe widzowie to pytanie znajdzie ten artykuł, aby być pomocne: http://perpendiculo.us/?p=133

Odpowiedz

12

Ważne jest, aby pamiętać, że @synchronized zawiera niezbędną logikę try/catch do zwolnij blokadę w wyjątku. Po dodaniu tej logiki różnica wydajności (która nie jest duża w ogólnej wielkości) prawdopodobnie znacznie się zmniejszy.

+4

Pamiętaj również, że synchronizacja @ jest blokadą rekursywną, w której NSLock nie jest. –

+1

@ RichardJ.RossIII - Sprzeczny punkt. Prawdopodobnie nie jest to znaczące w większości przypadków, ale może stanowić pewną różnicę wydajności - '@ synchronized' powinno być porównywane z NSRecursiveLock. –

+1

A co z pthread_mutex? Jestem bardziej zainteresowany @Synchronized vs. pthread_mutex (dużo czytałem o tych dwóch, odkąd opublikowałem to pytanie). – ArtSabintsev