Tak, wygenerowane dokumenty są nowe, a planowanie nie jest jeszcze udokumentowane.
Harmonogram w rxcpp v2 oparty jest na harmonogramie i konstrukcjach robotniczych używanych przez RxJava (Eric Meijer był zaangażowany) Dokumenty dla RxJava będą zawierały wyjaśnienie dla harmonogramu i pracownika. rxcpp dodaje plan, koordynację i koordynator.
scheduler
jest właścicielem osi czasu, która jest wyeksponowana za pomocą metody now()
. scheduler
to także fabryka dla worker
s na osi czasu. ponieważ program planujący jest właścicielem osi czasu, możliwe jest budowanie harmonogramów podróży w czasie. Wirtualny harmonogram jest podstawą dla testowego programu planującego, który używa tego do ukończenia wielosekundowych testów w ms.
worker
jest kolejką oczekujących na schedulable
s dla osi czasu i ma długość życia. kiedy osiągnięty zostanie czas schedulable
, zostanie uruchomiony schedulable
. Kolejka zachowuje kolejność wstawiania, więc gdy N schedulable
s mają ten sam czas docelowy, są one uruchamiane w kolejności, w jakiej zostały wstawione do kolejki. worker
gwarantuje, że każdy schedulable
zakończy się przed rozpoczęciem kolejnego schedulable
. kiedy całe życie worker
jest anulowane, wszystkie oczekujące schedulable
s są odrzucane.
jest właścicielem funkcji i ma pracownika i całe życie. gdy okres użytkowania schedulable
jest anulowany, funkcja schedulable
nie zostanie wywołana. schedulable
jest przekazywana do funkcji i pozwala funkcji na zmianę harmonogramu lub zaplanowanie czegoś innego na tym samym pracowniku.
Nowe koncepcje to koordynacja i koordynator. Dodałem je, aby uprościć implementacje operatorów i wprowadzić płatności za wykorzystanie w implementacjach operatorów. W szczególności, w Rx.NET i RxJava, operatory używają operacji atomowych i prymitywów synchronizacji do koordynowania wiadomości z wielu strumieni, nawet gdy wszystkie strumienie są w tym samym wątku (jak zdarzenia UI). Koordynacje identity_. . .
w rxcpp są używane domyślnie i nie mają narzutu. Koordynacje syncronize_. . .
i observe_on_. . .
wykorzystują odpowiednio mutex i queue-to-a-worker do bezpiecznego przeplatania wielu strumieni.
coordination
to fabryka dla coordinator
s i ma scheduler
.
coordinator
ma worker
i jest fabrycznym koordynowanych observable
s, subscriber
s oraz schedulable
funkcji.
Wszyscy operatorzy, którzy wykonują wiele strumieni lub zajmują się czasem (nawet subskrybuj i obserwuj), przyjmują parametr koordynacji, a nie harmonogram.
Oto niektóre z dostarczonych funkcji, które spowodują koordynację przy użyciu określonego harmonogramu.
- identity_immediate()
- identity_current_thread()
- identity_same_worker (w pracownik)
- serialize_event_loop()
- serialize_new_thread()
- serialize_same_worker (robotnik W)
- observe_on_event_loop()
- observe_on_new_thread()
Nie ma jeszcze harmonogramu puli wątków. Harmonogram puli wątków wymaga zależności od implementacji puli wątków, ponieważ nie chcę tworzyć puli wątków. Moim planem jest stworzenie programu planującego dla puli wątków systemu Windows i puli wątków jabłek oraz puli wykonawczej asio boost. Jedno pytanie, na które należy odpowiedzieć, to czy te konstrukcje specyficzne dla platformy powinny żyć w repozytorium rxcpp lub mieć repozytorium specyficzne dla platformy.
Opinie, opinie i pomysły są mile widziane!
Dzięki za komentarz, udało mi się połączyć ze sobą prosty harmonogram (z bardzo ograniczonym zestawem funkcji), ale wystarczy na razie zaspokoić moje podstawowe potrzeby. Skorzystałem z samouczka na temat programu Scheduler/Worker impl w Javie (4 części): http://akarnokd.blogspot.de/2015/05/schedulers-part-1.html, a następnie zmapowałem moją wiedzę do świata C++ - zadziałało, więc zalecamy takie podejście, zanim dostępna będzie pełniejsza dokumentacja. – jskierbi
Brzmi świetnie! Chciałbym to zobaczyć :) –