Przykład Disruptor z 1 wydawcą i 4 równoległymi odbiorcami

W tym przykładziehttps://stackoverflow.com/a/9980346/93647 i tuDlaczego mój przykład zakłócający jest tak powolny? (na końcu pytania) jest 1 wydawca, który publikuje przedmioty i 1 konsument.

Ale w moim przypadku praca konsumentów jest dużo bardziej skomplikowana i zajmuje trochę czasu. Chcę więc, aby 4 konsumentów przetwarzało dane równolegle.

Na przykład, jeśli producent produkuje numery: 1,2,3,4,5,6,7,8,9,10,11 ..

Chcę, żeby konsument1 złapał 1,5,9, ... konsument2, by złapać 2,6,10, ... konsument3, żeby złapać 3,7,11, ... konsument4, żeby złapać 4,8,12 ... ( cóż, nie dokładnie te liczby, chodzi o to, że dane powinny być przetwarzane równolegle, nie obchodzi mnie, który numer jest przetwarzany na którym konsumentie

I pamiętajcie, że trzeba to zrobić równolegle, ponieważ w rzeczywistym zastosowaniu praca konsumencka jest dość droga. Oczekuję, że konsumenci będą wykonywani w różnych wątkach, aby korzystać z mocy systemów wielordzeniowych.

Oczywiście mogę po prostu utworzyć 4 bufory pierścieniowe i dołączyć 1 konsumenta do 1 bufora pierścieniowego. W ten sposób mogę użyć oryginalnego przykładu. Ale czuję, że nie byłoby to prawidłowe. Prawdopodobnie poprawne byłoby utworzenie 1 wydawcy (1 bufor dzwonka) i 4 konsumentów - ponieważ tego właśnie potrzebuję.

Dodanie linku do bardzo podobnego pytania w grupach google:https://groups.google.com/forum/#!msg/lmax-disruptor/-CLapWuwWLU/GHEP4UkxrAEJ

Mamy więc dwie opcje:

jeden pierścień wielu konsumentów (każdy konsument „obudzi się” przy każdym dodaniu, wszyscy konsumenci powinni mieć ten sam WaitStrategy)wiele „jednego pierścienia - jeden konsument” (każdy konsument obudzi się tylko na danych, które powinien przetworzyć. każdy konsument może mieć własną WaitStrategy).

questionAnswers(2)

yourAnswerToTheQuestion