2012-03-02 25 views
7

Tôi đã đọc tài liệu về akka và không thể hiểu rõ về tương tác luồng khi sử dụng akka. Tài liệu có thể bỏ qua điều này là hiển nhiên nhưng nó không quá rõ ràng đối với tôi.Làm cách nào để diễn viên akka tương tác giữa các chủ đề

Tất cả diễn viên akka dường như được chạy trong cùng một chuỗi họ được gọi. Tôi thấy các diễn viên là đồng thủ tục mà chỉ có thiết lập lại stack riêng mỗi lần nhận được gọi.

Bạn có thể thực hiện một chuỗi lớn các diễn viên chuyển đổi theo đường thẳng. Mỗi nhận được thực hiện hoạt động không chặn nhỏ và buộc một người khác nhận được để làm việc hơn nữa. Không có vòng lặp sự kiện, có thể xử lý các thông báo bên ngoài hệ thống diễn viên.

Tôi muốn nhận yêu cầu từ chủ đề khác, thực hiện thao tác kiểm soát và đợi một tin nhắn khác.

Có một số trường hợp sử dụng thể hiện nhu cầu của tôi.

  1. Có chuỗi liên tục bỏ phiếu dữ liệu từ một số nguồn. Khi dữ liệu khớp với mẫu, nó sẽ gọi trình xử lý theo hướng sự kiện dựa trên các tác nhân. Bộ điều khiển hợp lý đưa ra quyết định và chuyển nó cho người lao động. Nên có hai chuỗi liên tục. Một luồng hoạt động liên tục trên việc bỏ phiếu và một luồng khác hoạt động không đồng bộ để kiểm soát nó hoạt động. Bạn không nên để các diễn viên akka cho chủ đề đầu tiên kể từ khi họ phá vỡ các giai đoạn bỏ phiếu và chủ đề đầu tiên không nên chặn các diễn viên để họ cần một chủ đề khác.

  2. Có một số loại trò chơi trên bảng hai mặt. Một bên có một chuỗi điều khiển lịch trình thời gian tính toán hoạt động tương tác với máy chủ bảng và etcetera. thread khác là a thread tính toán nặng mà vòng qua các biến thể khác nhau và không thể được viết bằng AKKA vì nó đã chặn chất

Tôi nhận thức AKKA kỳ hạn hiện có, nhưng họ đại diện cho một nhiệm vụ làm việc mà chạy một lần bị sa thải và tắt xuống sau khi thực hiện mục tiêu của họ. Tương lai cũng được kết hợp với các diễn viên akka, nhưng không thể diễn tả các chuỗi làm việc lặp lại.

Hệ thống diễn viên Akka kết hợp các loại vòng sự kiện mạng khác nhau. Bạn có thể sử dụng hệ thống diễn viên từ xa tích hợp sẵn hoặc giao thức 0mq nổi tiếng. Nhưng việc sử dụng mạng cho các tương tác luồng có vẻ như quá mức đối với tôi.

Cách được cho là để dán chủ đề không phải là akka bằng sợi akka? Tôi có nên viết một vài thủ tục đặc biệt để thực hiện thông điệp truyền đi theo cách an toàn không?

+1

tốt, tôi không nghĩ rằng chúng tôi bỏ qua tất cả những điều đó: http://akka.io/docs/akka/2.0-RC4/scala/dispatchers.html –

+0

Một sửa đổi khác: diễn viên akka không chạy trên cùng chủ đề chúng được gọi, xem nhận xét trước của tôi về tài liệu. Các diễn viên không phải là đồng thủ tục. “Stack reset” không phải là một khái niệm được JVM hỗ trợ. Các mô hình diễn viên là một mức độ trừu tượng cao hơn so với chủ đề. Việc truyền các thông điệp tới một diễn viên luôn luôn là luồng an toàn (xem 'ActorRef.tell()') –

+0

Tôi đề nghị bạn kiểm tra akka bằng cách tích hợp lạc đà apache để biết cách trả lời các sự kiện bên ngoài. Cuốn sách Akka Essentials http: //www.packtpub.com/akka-java-applications-essential/book có một mô tả rõ ràng về mô hình luồng với nhiều mẫu mã có thể chạy được trong cả Java và Scala để có được tất cả các nguyên tắc cơ bản. – simbo1905

Trả lời

4

Nếu bạn cần bỏ phiếu, khi đó chuỗi bỏ phiếu sẽ chỉ chuyển bất kỳ nội dung nào được thăm dò thành thư và kích hoạt nó cho một diễn viên.

Tôi thấy hữu ích hơn khi sử dụng diễn viên với một receiveTimeout để thực hiện cuộc thăm dò không bị chặn trong một khoảng thời gian, và khi có điều gì đó được thăm dò ý kiến, nó sẽ xuất bản cho một diễn viên khác hoặc thậm chí là EventStream của ActorSystems , đối với hành động pub-sub thực sự.

+0

chuỗi diễn viên sẽ được chạy trong đó? Điều gì là bên dưới một hệ thống diễn viên, chủ đề nào được sử dụng bởi nó để giữ hoạt động riêng? – ayvango

+0

Trong trường hợp của tôi, tôi đang sử dụng akka để điều khiển ứng dụng xoay bằng điều khiển trình xem 3D. Vì vậy, tôi nghĩ về việc kết hợp ba vòng lặp sự kiện khác nhau mà không có điều kiện chủng tộc và các khối. Tôi cần thêm dữ liệu về cấu trúc hệ thống akka để xây dựng kiến ​​trúc đúng. – ayvango

+2

Chúng tôi có ~ 350 trang tài liệu: http://doc.akka.io –

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