Article View: pl.comp.lang.java
Article #153424Re: API zdarzeniowe / sekwencyjne, push/pull jak to ożenić
From: Maciej Sobczak
Date: Tue, 08 May 2012 07:34
Date: Tue, 08 May 2012 07:34
58 lines
3863 bytes
3863 bytes
On May 7, 4:18 pm, Jacek Czerwinski <x...@y.z.pl> wrote: > Producent danych jest w modelu zdarzeniowym i dane by podawał dalej w > modelu push. > > Ostateczny konsument danych ma coś jakby bardziej pull (oczekuje danych > z iteratora i o dziwo znana długość). Opcjonalne API (mniej mi pasuje) > oczekuje List bez jakiś udziwnień (mam nadzieję przetwarza je czystym > studenckim algorytmem bez skakania po długości) Tu pojawia się ogólny pomysł na generyczną listę (a raczej kolejkę), do której z jednej strony można na bieżąco dopychać dane a z drugiej iterować. W zasadzie jest to zwykła kolejka z iteratorem, którego hasNext()/next() jest wrapperem na blokującą operację get() z kolejki. Nie ma na to gotowca? > Po drodze algorytm dodatkowy, trzeba wychwycić zmiany tych danych, w > którym polu nastąpiła zmiana i choćby przez to pojawia się buforowanie > niewielkiej ilości danych ... Jakie zmiany? Skąd się te zmiany biorą? Czy pod tym pojęciem kryje się fakt, że producent (ten, co to robi push) może opublikować to samo kilka razy? Co to znaczy "to samo"? Jak są te dane identyfikowane? Klucze jakieś? Jeśli tak, to skąd się tu bierze koncepcja listy, czyli liniowej kolejności? Może raczej powinna to być mapa? Itd. No i rozpruł się worek z problemami... ;-) > Java, ale szukam czegoś ogólnego, bardziej wzorca, idei niż gotowca kodu. Wzorzec nazywa się iterator. Realnym przykładem takiego iteratora jest input stream iterator z C++, który ma te dwie główne cechy: nie musi mieć wszystkich danych w pamięci i może się synchronizować z fizycznym źródłem danych, którym może być choćby fizyczna kolejka FIFO, gdzie faktycznie jest gdzieś jakiś producent (być może inny proces) robiący push. Czyli koncepcyjnie nic nowego - oprócz tego "drobiazgu" z wychwytywaniem zmian. > Może iść tym tropem List'y - taka wirtualna lista która udostępnia > interfejs ale nie posiada na stałe tego 0.5GB danych, gdzieś w środku > niech się ten push męczy. No przecież napisałem. > Może (idea mglista) wątki i synchronizacja? Wątki i synchronizacja to potencjalny detal wynikający ze sposobu w jaki te dane są przekazywane. W przykładzie z kolejką FIFO powyżej nie są wymagane (system wszystko zrobi), w innym przykładzie z brokerem komunikatów wątki zapewni broker. Wątki mogą być potrzebne tylko wtedy, jeśli będziesz chciał komunikację między producentem i konsumentem zrobić ręcznie - i tu, zależnie od rozmachu, można pomyśleć o czymś gotowym. -- Maciej Sobczak * http://www.msobczak.com * http://www.inspirel.com
Technical Details
Message-ID:
<e65e8a62-6914-4814-98d5-2b907b172475@z14g2000vbh.googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.glorb.com!postnews.google.com!z14g2000vbh.googlegroups.com!not-for-mailReferences:
<jo8ljg$fi8$1@node2.news.atman.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.glorb.com!postnews.google.com!z14g2000vbh.googlegroups.com!not-for-mail From: Maciej Sobczak <see.my.homepage@gmail.com> Newsgroups: pl.comp.programming,pl.comp.lang.java Subject: Re: API zdarzeniowe / sekwencyjne, push/pull jak to ożenić Date: Tue, 8 May 2012 00:34:02 -0700 (PDT) Organization: http://groups.google.com Lines: 74 Message-ID: <e65e8a62-6914-4814-98d5-2b907b172475@z14g2000vbh.googlegroups.com> References: <jo8ljg$fi8$1@node2.news.atman.pl> NNTP-Posting-Host: 83.3.40.82 Mime-Version: 1.0 X-Trace: posting.google.com 1336462442 3941 127.0.0.1 (8 May 2012 07:34:02 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Tue, 8 May 2012 07:34:02 +0000 (UTC) Complaints-To: groups-abuse@google.com Injection-Info: z14g2000vbh.googlegroups.com; posting-host=83.3.40.82; posting-account=bMuEOQoAAACUUr_ghL3RBIi5neBZ5w_S User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:11.0) Gecko/20100101 Firefox/11.0,gzip(gfe) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit