Tôi đã thử dùng Akka (Java api). Những gì tôi đã cố gắng là so sánh mô hình đồng thời dựa trên diễn viên của Akka với mô hình đồng thời Java đơn giản (các lớp java.util.conc hiện).
Trường hợp sử dụng là một bản đồ kinh điển đơn giản làm giảm việc thực hiện số lượng ký tự. Bộ dữ liệu là một tập hợp các chuỗi được tạo ngẫu nhiên (độ dài 400 ký tự) và tính toán số nguyên âm trong chúng.
Đối với Akka, tôi đã sử dụng Bal cânDispatcher (để cân bằng tải giữa các luồng) và RoundRobinRouter (để giữ giới hạn cho các tác nhân chức năng của tôi). Đối với Java, tôi đã sử dụng kỹ thuật nối ngã ba đơn giản (được triển khai mà không có bất kỳ thuật toán đánh cắp công việc nào) sẽ phân tách bản đồ / giảm thực thi và tham gia kết quả. Kết quả trung gian đã được tổ chức trong việc chặn hàng đợi để làm cho việc tham gia càng song song càng tốt. Có lẽ, nếu tôi không sai, điều đó sẽ bắt chước bằng cách nào đó khái niệm "hộp thư" của các diễn viên Akka, nơi họ nhận được tin nhắn.
Quan sát: Cho đến tải trung bình (~ 50000 đầu vào chuỗi) kết quả tương đương nhau, thay đổi một chút trong các lần lặp khác nhau. Tuy nhiên, khi tôi tăng tải lên ~ 100000, nó sẽ treo giải pháp Java. Tôi đã cấu hình giải pháp Java với 20-30 luồng trong điều kiện này và nó đã thất bại trong tất cả các lần lặp.
Tăng tải lên 1000000, cũng gây tử vong cho Akka. Tôi có thể chia sẻ mã với bất kỳ ai quan tâm để kiểm tra chéo.
Vì vậy, đối với tôi, có vẻ như Akka mở rộng tốt hơn giải pháp đa luồng Java truyền thống. Và có lẽ lý do là sự kỳ diệu của Scala.
Nếu tôi có thể mô hình hóa một miền vấn đề như một thông điệp hướng sự kiện đi qua một, tôi nghĩ Akka là một lựa chọn tốt cho JVM.
Thử nghiệm được thực hiện trên: Phiên bản Java: 1.6 IDE: Eclipse 3.7 Windows Vista 32 bit. Ram 3GB. Bộ xử lý Intel Core i5, tốc độ xung nhịp 2,5 GHz
Xin lưu ý, miền vấn đề được sử dụng cho thử nghiệm có thể được tranh luận và tôi đã cố gắng công bằng như kiến thức Java của tôi cho phép :-)