2011-10-14 19 views

Trả lời

18

Có thể vì mô hình diễn viên giả định rằng mỗi cá thể tác nhân xử lý tuần tự hộp thư của riêng nó. Điều đó có nghĩa là nó sẽ không bao giờ xảy ra, rằng hai hoặc nhiều luồng đồng thời thực hiện mã của cá thể tác nhân đơn lẻ. Về mặt kỹ thuật, bạn có thể tạo một phương thức trong lớp của một diễn viên (vì nó vẫn là một đối tượng) và gọi nó từ nhiều luồng đồng thời, nhưng đây sẽ là một sự khởi đầu chính từ các quy tắc sử dụng của diễn viên và bạn sẽ làm điều đó. bởi vì sau đó bạn sẽ mất tất cả các đảm bảo an toàn luồng của mô hình đó. Đây cũng là một trong những lý do, tại sao Akka giới thiệu một khái niệm về ActorRef - một tay cầm, cho phép bạn giao tiếp với nam diễn viên thông qua việc gửi tin nhắn, nhưng không phải bằng cách gọi trực tiếp các phương thức của nó.

+0

Cảm ơn Przemek. Điều đó giải thích. –

4

Tôi nghĩ chúng ta có nó khá tốt tài liệu: http://doc.akka.io/docs/akka/2.3.9/general/jmm.html

+0

Tôi đã đọc tài liệu đó nhiều lần. Tôi là một newman JVM; trong sự hiểu biết của tôi, một 'xảy ra trước' chỉ xác định 'khả năng hiển thị'. Chúng tôi vẫn có thể gặp sự cố do nhiều luồng trong phần quan trọng. –

+3

Akka bảo vệ chống lại việc thực hiện thư cho cùng một diễn viên cùng một lúc bằng cách chỉ cho phép hộp thư được lên lịch thực thi một lần. (hoặc nó được lên kế hoạch để thực hiện hoặc nó không). Bằng cách làm cho Runbox Mailbox không chỉ làm chúng ta tránh phân bổ các runnables mới, nhưng chúng ta cũng có thể, thông qua một thao tác CAS đơn giản, đảm bảo rằng một hộp thư chỉ được lên lịch để thực hiện một lần, điều đó có nghĩa là không cần thêm sách để đảm bảo rằng 2 chủ đề không xử lý cùng một hộp thư cùng một lúc. –

+0

Giải thích tuyệt vời. Điều này chắc chắn sẽ giúp tôi đọc thêm. Tuy nhiên, một câu hỏi, làm thế nào tôi có thể suy ra 'xử lý loại trừ lẫn nhau' của hộp thư từ http://akka.io/docs/akka/1.2/general/jmm.html? –

2

diễn viên là 'Treadsafe'. Hệ thống diễn viên (AKKA), cung cấp cho mỗi diễn viên với 'sợi chỉ trọng lượng nhẹ' của riêng mình. Có nghĩa rằng đây không phải là một bước đi, nhưng hệ thống AKKA sẽ tạo ấn tượng rằng một diễn viên luôn luôn chạy trong chủ đề riêng của nó cho nhà phát triển. Điều này có nghĩa là bất kỳ thao tác nào được thực hiện do hành động trên một tin nhắn là, cho tất cả các mục đích, chủ đề an toàn.

Tuy nhiên, bạn không nên làm suy yếu AKKA bằng cách sử dụng tin nhắn có thể thay đổi hoặc trạng thái công khai. Nếu bạn phát triển bạn diễn viên để được đứng một mình đơn vị chức năng, sau đó họ sẽ được threadsafe.

Xem thêm: http://doc.akka.io/docs/akka/2.3.12/general/actors.html#State

http://doc.akka.io/docs/akka/2.3.12/general/jmm.html cho một nghiên cứu sâu sắc hơn của mô hình bộ nhớ AKKA và làm thế nào nó quản lý các vấn đề 'lốp'.

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