2011-10-13 23 views
15

Khi xây dựng một ứng dụng đa luồng lớn cho ngành dịch vụ tài chính, tôi đã sử dụng các lớp không thay đổi và mô hình Diễn viên cho luồng công việc ở mọi nơi tôi có thể. Tôi khá hài lòng với kết quả. Nó sử dụng một lượng không gian heap hợp lý (trong Java btw) nhưng GC của JVM hoạt động khá tốt với các lớp không thay đổi ngắn hạn.Những điểm yếu trong việc sử dụng mô hình Actutability + Actor cho lập trình đồng thời là gì?

Tôi chỉ tự hỏi liệu có bất kỳ nhược điểm nào khi sử dụng kiểu mẫu này về sau không? Khi gỡ lỗi một mã nhóm bạn, tôi thường thấy mình đang suy giảm mẫu này theo cách này hay cách khác. Tôi đoán một khi có một cái búa, mọi thứ trông giống như một cái đinh. Câu hỏi đặt ra là: Khi nào thì mẫu thiết kế này (mô hình?) Hoạt động kém?

linh cảm của tôi là khi sử dụng bộ nhớ là một vấn đề lớn hoặc khi các hạn chế dự án đòi hỏi một cái gì đó dọc theo dòng cấp thấp C vv

Trả lời

5

Nhiều khoa học mã mô phỏng thực sự nhớ chuyên sâu. Ví dụ cho các mô hình automata di động truy cập bộ nhớ nhanh là quan trọng hơn sức mạnh của CPU. Trong trường hợp đó, việc truy cập và sửa đổi tại chỗ một mảng có thể thay đổi luôn luôn nhanh hơn (ít nhất là trong tất cả các thử nghiệm của tôi).

+2

Tuyệt đối, nhưng vẻ đẹp là bạn có thể trộn và kết hợp, vì vậy bạn có thể sử dụng diễn viên cho các dấu phẩy và sử dụng những thứ như bộ sưu tập song song, vv cho tính toán thô. –

+2

Có. Đó chính xác là những gì chúng tôi làm. Tôi đã giải quyết phần 'bất biến'. – paradigmatic

5

Tất cả phụ thuộc vào thiết kế dự án của bạn.

Nếu bạn có một số tài nguyên và nhiều diễn viên sử dụng nó thì mẫu chung là thiết kế diễn viên người truy cập. Sau đó, khi một số diễn viên khác cần hỏi về một số tài nguyên, anh ta hỏi về nó là diễn viên phụ. Sau đó câu trả lời được sao chép qua kênh tin nhắn.

Bây giờ hãy tưởng tượng - bạn có tài nguyên thực sự nặng (ví dụ: map[String, BigObject]) và các diễn viên khác thường hỏi về một số BigObject thì bạn lãng phí băng thông của mình.
Ý tưởng tốt hơn là chia sẻ tài nguyên cho tất cả các diễn viên ở chế độ chỉ đọc và làm cho một diễn viên thực hiện viết.

Ví dụ khác sẽ là trình kết nối cơ sở dữ liệu kết nối với cơ sở dữ liệu với rất nhiều dữ liệu blob. Khi kết nối cơ sở dữ liệu là luồng an toàn (như thường lệ), tốt hơn là chia sẻ tham chiếu đối tượng trình kết nối với tất cả các tác nhân, sau đó thiết kế một số tác nhân cung cấp quyền truy cập.

Tất cả những gì bạn cần nhớ là mọi thông tin liên lạc giữa các diễn viên được thực hiện bằng cách sao chép tin nhắn.

+2

Akka không sao chép bất kỳ tin nhắn nào, nó chỉ là đọc bộ nhớ. Trừ khi bạn đang chạy trong một thiết lập phân tán, nơi mà các tin nhắn cần phải được marshalled. –

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