Sự khác biệt của Akka's Actor với Scala's Actor là gì


76

Tôi thấy cũng có một mô hình diễn viên Akka, vì vậy tôi đang tự hỏi sự khác biệt giữa mô hình Diễn viên của Akka và Diễn viên của Scala là gì?



1
Diễn viên Scala bây giờ không còn ủng hộ diễn viên Akka, vậy tại sao phải bận tâm? :) goo.gl/VaPOu
Gian Marco

Bắt đầu Scala 2.10, scala.actorsthư viện trở nên không còn ủng hộ các diễn viên Akka.
Johnny

Câu trả lời:


59

Vâng, không có. Chỉ có mô hình Diễn viên, và diễn viên Akka và diễn viên Scala là hai cách triển khai của mô hình đó.

Mô hình All Actor nói rằng các nguyên thủy đồng thời của bạn là các tác nhân, có thể:

  • nhận một tin nhắn và quyết định việc cần làm tiếp theo tùy thuộc vào nội dung của tin nhắn, bao gồm:

  • gửi tin nhắn cho bất kỳ diễn viên nào họ biết

  • tạo ra các diễn viên mới

và cung cấp các đảm bảo nhất định, ví dụ:

  • bất kỳ tác nhân nào sẽ chỉ xử lý một tin nhắn tại một thời điểm

  • tin nhắn của diễn viên X gửi cho diễn viên Y sẽ đến theo thứ tự đã được gửi

Không có sự khác biệt giữa các diễn viên Scala và Akka ở cấp độ này.

Để biết sự khác biệt về những gì họ có thể làm, hãy xem Tổng quan về các triển khai Scala Actor khác nhau . Điểm lớn nhất đối với tôi là Akka hỗ trợ người giám sát và ActorRegistry.


6
Bản PDF so sánh được liên kết với câu trả lời được chấp nhận dường như không còn nữa. Đây là so sánh từ một trong những nhà phát triển Akka: akka.io/docs/misc/Comparison_between_4_actor_frameworks.pdf
Frank

7
Liên kết của bạn cũng là 404. Điều này hiện đang hoạt động: doc.akka.io/docs/misc/Comparison_between_4_actor_frameworks.pdf
Gian Marco

32

Cũng có một câu trả lời lịch sử. Những người tạo ra Scala nghĩ rằng cần phải có một khuôn khổ diễn viên. Jonas Bonér đã thử nó, nhưng không hoàn toàn hài lòng vì vậy anh ấy bắt đầu làm việc với một cái mới - phát triển thành Akka. Tuy nhiên, những người Scala nghĩ rằng nó tốt hơn của họ - vì vậy tại Jfokus 2011, họ đã thông báo rằng Akka sẽ trở thành khuôn khổ diễn viên tiêu chuẩn của Scala. Tuy nhiên, quá trình di chuyển đó sẽ mất một thời gian.


2
Yup, Scala thư viện diễn viên đã được tán thành trong 2.11 docs.scala-lang.org/overviews/core/actors-migration-guide.html
anshumans

7

Điều này phụ thuộc một chút vào ý bạn với "mô hình" - bạn có thể tham khảo "mô hình thực thi" hoặc "mô hình lập trình" (và có thể cả các mô hình khác).

Đối với các mô hình thực thi, về cơ bản có hai: dựa trên luồng hoặc dựa trên sự kiện. Thư viện diễn viên tiêu chuẩn Scala chứa cả hai. Dựa trên luồng sử dụng một luồng cho mỗi tác nhân, trong khi dựa trên sự kiện sử dụng một nhóm luồng. Cái trước dễ hiểu hơn, cái sau hiệu quả hơn. Akka được xây dựng theo mô hình dựa trên sự kiện.

Đối với mô hình lập trình, có một sự khác biệt lớn giữa thư viện tiêu chuẩn scala và Akka. Trong thư viện tiêu chuẩn scala, về cơ bản, bạn thực hiện phương thức "chạy" - và nếu bạn muốn đợi một tin nhắn đến, bạn sẽ rơi vào trạng thái chờ đợi (bằng cách gọi "nhận" hoặc "phản ứng"). Vì vậy, mô hình lập trình tuân theo "phép ẩn dụ luồng". Tuy nhiên, trong Akka, ẩn dụ lập trình là bạn thực hiện một vài phương thức vòng đời - nhưng phương thức "chạy" được viết bên trong khuôn khổ. Nó thực sự chỉ ra rằng mô hình lập trình này hoạt động tốt hơn rất nhiều với mô hình thực thi dựa trên sự kiện.

Nếu bạn quan tâm đến các mô hình thực thi và mô hình lập trình khác nhau của các tác nhân tiêu chuẩn scala, tôi đã viết một vài bài đăng về vấn đề này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.