2013-01-01 16 views
10

Muszę zaimplementować standardowy algorytm jednego konsumenta. Mogę go łatwo zaimplementować przy użyciu Queue i kilku instrukcji lock. Lub mogę po prostu użyć ConcurrentQueue. Co jest lepsze?wydajność ConcurrentQueue vs Queue + lock

Queue + lock Jeśli jest używany wtedy mogę zoptymalizować „wielokrotne dodawanie/retreival”, ponieważ mogę lock raz, a potem Add wiele razy.

Co jest szybciej w ogólnym przypadku - ConcurrentQueue lub Queue + lock i jaka jest różnica? Oczywiście ConcurrentQueue jest najbardziej prostą drogą do przodu, ale nie chcę stracić dużej wydajności, ponieważ używam tego w aplikacji handlu HFT.

+0

Po pierwsze, wydajność jest związana z liczbą procesorów. Trudno jest ocenić wydajność aplikacji wielowątkowej w pewnym trybie abstrakcyjnym. – user1929959

+7

A co z mierzeniem w twoim otoczeniu? Mogę podać ci numery, które dowodzą czegokolwiek na mojej maszynie. –

Odpowiedz

19

Od C# in a Nutshell:

Jednoczesne stos, kolejka klasy i torby są realizowane wewnętrznie połączonych listach. Dzięki temu są mniej wydajne pod względem pamięci niż niekonkluzywne klasy Stack i Queue, ale lepiej dla równoczesnego dostępu , ponieważ połączone listy są przeznaczone do implementacji niskiego blokowania lub pozbawionych blokady lub .

Innymi słowy, trudno jest określić ogólny przypadek, nie wspominając już o przewidywaniu różnicy w wydajności.

To zależy od wielkości kolekcji i użytkowania. Wydajność może być lepsza, biorąc pod uwagę wystarczający równoczesny dostęp, zużycie pamięci będzie gorsze.

Powiązane problemy