Trong dòng Akka, Mat trong Nguồn [Out, Mat] hoặc Sink [In, Mat] thể hiện là gì. Khi nào nó thực sự sẽ được sử dụng?Luồng Akka: Mat thể hiện trong Nguồn [ra, Mat]
Trả lời
Thông số loại Mat
đại diện cho loại của giá trị vật hoá của luồng này. Hãy nhớ rằng trong Akka Source
, Flow
, Sink
(tốt, tất cả các đồ thị) chỉ là bản thiết kế - chúng không tự làm bất kỳ việc xử lý nào, chúng chỉ mô tả cách xây dựng luồng. Quá trình biến các bản thiết kế này thành luồng làm việc có dữ liệu trực tiếp được gọi là hiện thực hóa.
Phương pháp cốt lõi để thực hiện luồng được gọi là run()
và là defined trong lớp RunnableGraph
. Tất cả các phương pháp khác để chạy luồng (ví dụ: runWith
trên Sink
hoặc Source
) cuối cùng ủy quyền cho phương pháp này. Bạn có thể thấy rằng phương thức này trả về Mat
. Nghĩa là, vật chất hóa một dòng mang lại giá trị vật chất hóa.
Ví dụ, có một bồn rửa kết hợp tất cả các giá trị trong một dòng vào một giá trị duy nhất, nó được xây dựng với Sink.fold
. Nhưng làm thế nào để bạn có được giá trị này? Vì luồng đang chạy không đồng bộ, loại tự nhiên cho giá trị này sẽ là Future[T]
, trong đó T
là loại trình tích lũy nếp gấp. Hóa ra, Sink.fold
trả về Sink[In, Future[T]]
, tức là, Future[T]
là giá trị vật chất của nó, do đó, khi bạn thực hiện nó, bạn sẽ có một phiên bản Future[T]
mà sau đó bạn có thể sử dụng trong mã của riêng mình để xử lý thêm: luồng hoàn thành chính xác và nó sẽ hoàn thành với sự thất bại nếu luồng đã chấm dứt với một ngoại lệ.
Mỗi phần của biểu đồ bạn xây dựng bằng cách kết hợp bồn rửa, nguồn và luồng (và các loại biểu đồ khác) có thể có giá trị vật chất liên quan. Ví dụ, giá trị vật hoá của Source.queue
là một hàng đợi mà bạn có thể sử dụng để đẩy các phần tử vào luồng khi nó được vật chất hóa và giá trị vật hoá của Sink.actorSubscriber
là một ActorRef
mà bạn có thể sử dụng để tương tác với diễn viên (được tạo bởi trình kích hoạt khi luồng được vật hoá). Mặt khác, có Flow.map
là luồng không có giá trị vật liệu có ý nghĩa (không có gì bạn có thể kiểm soát bên ngoài khi bạn chỉ áp dụng hàm thuần túy cho luồng), do đó giá trị vật chất của nó là NotUsed
, về cơ bản là Unit
.
Đương nhiên, có thể cho các phần khác nhau của luồng chứa giá trị vật chất của riêng chúng. Ví dụ: không có gì ngăn bạn kết hợp Source.queue
và Sink.fold
. Nhưng RunnableGraph.run()
chỉ có thể trả lại một giá trị vật hoá. Để khắc phục điều này, thường có hai biến thể kết hợp các phương pháp trên Sink
s, Flow
s và các đồ thị khác, thường được gọi là method
và methodMat
, ví dụ: to
và toMat
. Biến thể thứ hai cho phép bạn chọn cách kết hợp giá trị vật chất của các luồng bạn đang tham gia. Ví dụ, bạn có thể đặt chúng vào một tuple để có được cả hai:
val (queue, future) = Source.queue[Int](10, OverflowStrategy.fail)
.map(x => x + 10)
.toMat(Sink.fold(0)(_ + _))(Keep.both)
.run()
phương pháp mặc định kết hợp (không có Mat
suffix) thường chọn một trong hai bên trái hoặc bên phải cụ thể hóa giá trị, tùy thuộc vào những gì sẽ là tự nhiên nhất điều cần làm cho loại luồng cụ thể này.Đối tượng Keep
chứa các phương thức tiện lợi trả về hoặc trái, phải hoặc cả hai đối số, cụ thể cho mục đích sử dụng chúng làm đối số cuối cùng cho các phương thức *Mat
, nhưng không có gì ngăn bạn viết hàm kết hợp của riêng bạn.
- 1. UnsatisfiedLinkError trong khi thực hiện Mat mới()
- 2. CONCATENATE Mat trong OpenCV
- 3. Mat để unsigned char *
- 4. Các tham số loại cho Nguồn <Out,Mat> có nghĩa là gì?
- 5. Chuyển đổi giữa cv :: Mat và arma :: mat
- 6. Cắt ảnh Mat trong OpenCV 2.4.3 (iOS)
- 7. Từ IPLImage to Mat
- 8. Eclipse: lỗi MAT
- 9. OpenCV Mat CV_32FC1
- 10. Sử dụng Mat :: (i, j) trong OpenCV cho một đối tượng 2-D Mat
- 11. unsigned char ** để OpenCV mat
- 12. OpenCV cv :: Mat đặt nếu
- 13. Đọc các tệp .mat trong Python
- 14. OpenCV thay đổi Mat bên trong một hàm (phạm vi Mat)
- 15. Xóa cột khỏi OpenCV Mat
- 16. Hợp nhất nhiều cv :: Mat?
- 17. lỗi với gpumat và mat
- 18. OpenCV Mat :: những chức năng
- 19. Vectơ hai phần tử được thể hiện trong một OpenCV Mat trong Java như thế nào?
- 20. Cập nhật submatrix của Mat trong OpenCV
- 21. Hiển thị nguồn cấp dữ liệu webcam trong cv :: Định dạng Mat trong hình ảnh
- 22. Sự khác nhau giữa Mat :: clone and Mat :: copyTo là gì?
- 23. OpenCV: Nhận tổng giá trị Mat
- 24. OpenCV yếu tố truy cập từ Mat
- 25. Hiển thị OpenCV Mat với JavaFX
- 26. lỗi opencv nhân 2 Mat của
- 27. OpenCV tạo Mat từ mảng byte
- 28. Cách đọc tệp mat v7.3 qua h5py?
- 29. Viết cv :: Mat thành tệp nhị phân?
- 30. Tạo Mat từ vector <point2f>
Nó đại diện cho khái niệm về hiện thực hóa biểu đồ. Bạn có thể muốn đọc [tài liệu] (http://doc.akka.io/docs/akka/2.4.10/scala/stream/stream-flows-and-basics.html#Defining_and_running_streams). – hasumedic