2015-05-17 48 views
8

Tôi đang cố gắng tìm ra mô hình lập lịch biểu trong C++ version của Rx.Trình lập lịch biểu trong Rxcpp

Biết phiên bản C# nơi có giao diện đơn giản với một phương thức Lịch biểu; Phiên bản C++ có vẻ khá phức tạp, với các công cụ như lập lịch biểu, nhân viên và phối hợp.

Một phần thiếu lớn đối với tôi là triển khai bộ lập lịch nhóm luồng, có tồn tại với một số tên khác không? Làm thế nào tôi sẽ thực hiện nó tự của tôi? Tôi có nên viết nó ở trên PPL (Windows) không? Nếu tôi cần một người quan sát (như diễn viên) trên nó, tôi nên sử dụng cái gì? Peeking herehere có thể cho thấy đây không phải là một nhiệm vụ tầm thường.

Nó thực sự sẽ giúp nhận được một số loại tổng quan về chủ đề, vì tài liệu official được tạo tự động và vẫn thực sự thưa thớt.

Trả lời

6

Có, tài liệu được tạo mới và tài liệu lập lịch chưa được ghi lại.

Trình lên lịch trong rxcpp v2 dựa trên lịch trình và cấu trúc công nhân mà RxJava sử dụng (Eric Meijer đã tham gia) Các tài liệu cho RxJava sẽ có giải thích cho người lập lịch và nhân viên. rxcpp thêm lịch, điều phối và điều phối viên.

scheduler sở hữu dòng thời gian được hiển thị theo phương pháp now(). scheduler cũng là một nhà máy cho worker s trong dòng thời gian đó. vì một người lên lịch sở hữu một dòng thời gian nên có thể xây dựng các bộ lập lịch thời gian đi lại. bộ lập lịch ảo là cơ sở cho trình lập lịch biểu thử nghiệm sử dụng công cụ này để thực hiện các phép thử nhiều giây hoàn thành bằng ms.

worker sở hữu một hàng đợi đang chờ xử lý schedulable s cho dòng thời gian và có thời gian tồn tại. khi thời gian cho một số schedulable đạt đến số schedulable được chạy. Hàng đợi duy trì thứ tự chèn để khi N schedulable s có cùng thời gian đích chúng được chạy theo thứ tự mà chúng được chèn vào hàng đợi. worker đảm bảo rằng mỗi schedulable hoàn tất trước khi bắt đầu schedulable tiếp theo. khi tuổi thọ của worker bị hủy đăng ký, tất cả các số đang chờ xử lý schedulable sẽ bị hủy.

schedulable sở hữu một chức năng và có nhân viên và cả đời. khi tuổi thọ của schedulable bị hủy đăng ký, chức năng schedulable sẽ không được gọi. các schedulable được chuyển đến chức năng và cho phép chức năng lên lịch lại chính nó hoặc lên lịch một cái gì đó khác trên cùng một công nhân.

Các khái niệm mới là phối hợp và điều phối viên. Tôi đã thêm những điều này để đơn giản hóa việc triển khai toán tử và giới thiệu tính năng trả tiền để sử dụng trong việc triển khai toán tử. Cụ thể, trong Rx.NET và RxJava, các toán tử sử dụng các hoạt động nguyên tử và đồng bộ hóa nguyên thủy để điều phối các thông điệp từ nhiều luồng ngay cả khi tất cả các luồng trên cùng một luồng (như các sự kiện UI). Các điều phối identity_. . . trong rxcpp được sử dụng theo mặc định và không có phí. Các điều phối syncronize_. . .observe_on_. . . sử dụng mutex và hàng đợi-trên-một-công nhân tương ứng, để xen kẽ nhiều luồng một cách an toàn.

coordination là một nhà máy cho coordinator s và có scheduler.

coordinatorworker, và là một nhà máy phối hợp observable s, subscriber s và schedulable chức năng.

Tất cả các toán tử sử dụng nhiều luồng hoặc xử lý kịp thời (ngay cả subscribe_on và observ_on) đều có tham số phối hợp, chứ không phải lên lịch.

Dưới đây là một số chức năng được cung cấp sẽ tạo ra sự phối hợp bằng cách sử dụng một trình lên lịch cụ thể.

  • identity_immediate()
  • identity_current_thread()
  • identity_same_worker (công nhân w)
  • serialize_event_loop()
  • serialize_new_thread()
  • serialize_same_worker (công nhân w)
  • observe_on_event_loop()
  • observ_on_new_thread()

Hiện chưa có bộ lập lịch nhóm. Trình lập lịch biểu của luồng yêu cầu sử dụng sự phụ thuộc vào việc triển khai luồng-pool vì tôi không muốn viết một thread-pool. Kế hoạch của tôi là tạo một bộ lập lịch cho các cửa sổ thread-pool và apple thread-pool và tăng asio executor pool .. Một câu hỏi cần trả lời là liệu các cấu trúc nền tảng cụ thể này có nên tồn tại trong repo rxcpp hay không.

Đóng góp, ý kiến ​​và ý tưởng được hoan nghênh!

+1

Cảm ơn nhận xét, tôi đã có thể đặt một bộ lập lịch đơn giản với nhau (với bộ tính năng rất hạn chế), nhưng nó đủ để đáp ứng nhu cầu cơ bản của tôi bây giờ. Tôi đã làm theo hướng dẫn về Scheduler/Worker impl trong Java (4 phần): http://akarnokd.blogspot.de/2015/05/schedulers-part-1.html sau đó ánh xạ kiến ​​thức của tôi tới C++ world - nó đã hoạt động nên tôi giới thiệu phương pháp này trước khi có thêm tài liệu hoàn chỉnh – jskierbi

+1

Âm thanh tuyệt vời! Tôi rất thích nhìn thấy nó :) –

Các vấn đề liên quan