Chciałbym, żebyś mógł mi wyjaśnić w prosty sposób, jak działa tupot zakłócacza. Ta koncepcja była dla mnie nieuchwytna.
Być może z twoją pomocą mógłbym to zrozumieć.
java
design-patterns
multithreading
real-time
chrisapotek
źródło
źródło
Odpowiedzi:
Fowler Artykuł dostawcy dobry grunt, a to wyjaśnienie:
Bardziej konwencjonalne podejście może wykorzystywać Kolejkę producenta i Kolejkę klienta, z których każda używa blokad jako mechanizmów współbieżności. W praktyce to, co dzieje się z kolejkami producentów i konsumentów, polega na tym, że przez większość czasu kolejki są całkowicie puste lub całkowicie zapełnione, co powoduje rywalizację o blokadę i marnowanie cykli zegara. Dezintegrator łagodzi to częściowo, ponieważ wszyscy producenci i konsumenci korzystają z tego samego mechanizmu kolejki, koordynując ze sobą, obserwując liczniki sekwencji, a nie stosując mechanizmy blokujące.
źródło
Z tego artykułu o CoralQueue :
Tak więc producenci i konsumenci nie nadepną na siebie wewnątrz okrągłego układu , sprawdzając odpowiadające im sekwencje . Aby przekazywać sobie nawzajem swoje sekwencje, używają barier pamięci zamiast zamków. To najszybszy sposób, w jaki mogą się komunikować bez blokady.
Na szczęście nie trzeba zagłębiać się w wewnętrzne szczegóły wzoru zakłócającego, aby go użyć. Oprócz implementacji LMAX istnieje CoralQueue opracowany przez Coral Blocks, z którym jestem związany. Niektórym łatwiej jest zrozumieć pojęcie, czytając kod, dlatego poniżej znajduje się prosty przykład pojedynczego producenta wysyłającego wiadomości do jednego konsumenta. Możesz również sprawdzić to pytanie na przykładzie demultipleksera (od jednego producenta do wielu konsumentów).
Oświadczenie: Jestem jednym z twórców CoralQueue.
źródło