2013-03-21 20 views
48

Tôi chỉ so sánh hiệu suất của các diễn viên scala với chủ đề java.Chủ đề Java nặng như thế nào so với các diễn viên Scala/Akka?

Tôi ngạc nhiên khi thấy sự khác biệt, tôi quan sát thấy rằng với hệ thống của mình, tôi có thể sinh ra tối đa ~ 2000 luồng (chỉ ở một thời điểm), nhưng với cùng một hệ thống, tôi có thể đẻ ~ 500.000 diễn viên scala.

Cả hai chương trình đều sử dụng khoảng 81MB bộ nhớ Heap của JVM.

Bạn có thể giải thích Chủ đề java có trọng lượng nặng hơn nhiều so với các diễn viên scala/akka không? Yếu tố quan trọng nào khiến cho diễn viên scala có trọng lượng nhẹ như vậy?

Nếu tôi muốn đạt được khả năng mở rộng tốt nhất, tôi có nên sử dụng máy chủ web dựa trên diễn viên thay vì máy chủ web/ứng dụng truyền thống dựa trên java như JBoss hoặc Tomcat không?

Cảm ơn.

+3

Đối với câu hỏi về máy chủ web của bạn, nó phụ thuộc vào những gì bạn cần. Có những giải pháp thực sự có khả năng mở rộng để đạt được thông lượng cao, dựa trên NIO như Netty, và họ không sử dụng các diễn viên. Bạn có cần một máy chủ web đầy đủ không? dịch vụ giao thông cao? Tích hợp cao với các khuôn khổ đã biết (jee, spring, ...)? Các diễn viên nói chung, và Akka 2.1 nói riêng với sự hỗ trợ cho việc phân cụm, hoặc chơi! dựa trên akka, là giải pháp "có thể mở rộng", nhưng không có dấu đầu dòng bạc cho tất cả các tình huống. Nó thực sự phụ thuộc vào nhu cầu của bạn. –

Trả lời

37

Các diễn viên Scala (bao gồm cả giống Akka) sử dụng các chuỗi Java. Không có phép thuật: hơn một vài nghìn luồng chạy đồng thời là một vấn đề đối với hầu hết các máy tính để bàn.

Mô hình diễn viên cho phép diễn viên theo yêu cầu không chiếm chủ đề trừ khi họ có việc phải làm. Một số vấn đề có thể được mô hình hóa hiệu quả khi nhiều đại lý ngủ chờ đợi để có được một số công việc, những người sẽ làm điều đó tương đối nhanh chóng và sau đó quay trở lại giấc ngủ. Trong trường hợp đó, các diễn viên là một cách rất hiệu quả để sử dụng luồng Java để hoàn thành công việc của bạn, đặc biệt nếu bạn có một thư viện như Akka, nơi hiệu suất là ưu tiên cao.

Các Akka docs giải thích các khái niệm cơ bản khá tốt.

Tất cả các máy chủ web có thể mở rộng hợp lý phải giải quyết loại sự cố này theo cách này hay cách khác; bạn có lẽ không nên dựa trên quyết định của bạn cho máy chủ web chủ yếu vào việc diễn viên được sử dụng dưới mui xe hay không và bất kể bạn sử dụng cái gì, bạn luôn có thể tự thêm diễn viên.

+0

Tôi không chắc chắn các tài liệu hỗ trợ những gì bạn đã viết, như họ nói "... thường nhiều diễn viên chia sẻ một sợi". – Suma

+2

@Suma - Tôi không nghĩ bạn hiểu đoạn thứ hai của tôi. –

16

Một diễn viên Akka không tương đương với chuỗi. Nó giống như một Callable được thực hiện trên một threadpool.

Khi thư được gửi đến một diễn viên, diễn viên đó được đặt trên một luồng để xử lý thư. Khi nó được thực hiện, thread gộp lại có thể được sử dụng để thực hiện các tác nhân khác.

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