2015-05-17 29 views
8

Próbuję dowiedzieć się model planowania w C++ version z Rx.Harmonogramy w Rxcpp

Znając wersję C#, w której jest prosty interfejs z jedną metodą Schedule; Wersja C++ wydaje się dość skomplikowana, z takimi elementami jak harmonogram, pracownik i koordynacja.

Jednym z głównych brakujących elementów dla mnie jest implementacja harmonogramu puli wątków, czy istnieje z inną nazwą? Jak mógłbym to zrealizować samodzielnie? Czy powinienem napisać powyżej PPL (Windows)? Jeśli potrzebuję nadekranalizowanego (typu "Aktor)", co powinienem użyć? Peeking here i here może pokazać, że nie jest to trywialne zadanie.

To naprawdę pomogłoby uzyskać pewien przegląd tego tematu, ponieważ dokumentacja official jest generowana automatycznie i wciąż bardzo rzadka.

Odpowiedz

6

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!

+1

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

+1

Brzmi świetnie! Chciałbym to zobaczyć :) –