Dalsze czytanie:
Chciałbym przedstawić kilka moich artykułów, które są zainteresowane ogólnymi prymitywami synchronizacji i zagłębiają się w Monitor, zachowanie instrukcji blokady C #, właściwości i koszty w zależności od różnych scenariuszy i liczby wątków. W szczególności interesuje się marnotrawstwem procesora i okresami przepustowości, aby zrozumieć, ile pracy można wykonać w wielu scenariuszach:
https://www.codeproject.com/Articles/1236238/Unified-Concurrency-I-Introduction
https://www.codeproject.com/Articles/1237518/Unified-Concurrency-II-benchmarking-methodologies
https: // www. codeproject.com/Articles/1242156/Unified-Concurrency-III-cross-benchmarking
Oryginalna odpowiedź:
O jej!
Wygląda na to, że poprawna odpowiedź oznaczona tutaj jako ODPOWIEDŹ jest z natury niepoprawna! Chciałbym prosić autora odpowiedzi, z szacunkiem, aby przeczytał do końca artykuł, do którego prowadzi link. artykuł
Autor artykułu z 2003 roku dokonywał pomiarów tylko na maszynie Dual Core iw pierwszym przypadku pomiarowym mierzył blokowanie tylko jednym gwintem i wynik wynosił około 50ns na dostęp do zamka.
Nie mówi nic o blokadzie w środowisku współbieżnym. Musimy więc kontynuować czytanie artykułu, aw drugiej połowie autor mierzył scenariusz blokowania z dwoma i trzema wątkami, który zbliża się do poziomów współbieżności dzisiejszych procesorów.
Tak więc autor mówi, że przy dwóch wątkach na Dual Core zamki kosztują 120ns, a przy 3 wątkach idzie to 180ns. Wydaje się więc, że jest to wyraźnie zależne od liczby wątków jednocześnie uzyskujących dostęp do blokady.
Jest to więc proste, nie jest to 50 ns, chyba że jest to pojedynczy wątek, w którym blokada staje się bezużyteczna.
Inną kwestią do rozważenia jest to, że jest mierzony jako średni czas !
Gdyby mierzyć czas iteracji, byłyby nawet czasy od 1 ms do 20 ms, po prostu dlatego, że większość była szybka, ale kilka wątków będzie czekało na czas procesora i będzie miało nawet milisekundowe opóźnienia.
To zła wiadomość dla każdego rodzaju aplikacji, która wymaga dużej przepustowości i małych opóźnień.
Ostatnią kwestią do rozważenia jest to, że wewnątrz zamka mogą występować wolniejsze operacje i bardzo często tak jest. Im dłużej blok kodu jest wykonywany wewnątrz zamka, tym większa rywalizacja i opóźnienia rosną niebotycznie.
Proszę wziąć pod uwagę, że od 2003 roku minęła już ponad dekada, czyli kilka generacji procesorów zaprojektowanych specjalnie do pracy w pełni równoległej, a blokowanie znacznie szkodzi ich wydajności.