2011-11-01 29 views
6

nếu tôi muốn triển khai máy chủ am http.gc của số lượng lớn hơn diễn viên scala

tôi tạo diễn viên mới theo yêu cầu. Vì vậy, nó có thể mở rộng như cpu của tôi cập nhật.

nhưng nó có gây ra vấn đề về sử dụng bộ nhớ không? Người ta nói rằng diễn viên có một số hành vi kỳ lạ trong khi gc. mã sẽ bằng cách nào đó như thế:

class Worker extends Actor { 
    def act = react { 
     case req : Request => perform(req);exit() 
    } 
} 


class HttpEventHandler{ 
    def onConnect(conn) = { 
     new Worker ! createRequest(conn) 
    }  
} 

Edit: tôi đã thực hiện một bài kiểm tra về vấn đề này, kiểm tra thử nghiệm của tôi một cách chi tiết http://jilen.iteye.com/blog/1231178

Trả lời

3

Lift had some problems với Scala tích hợp trong thư viện diễn viên một vài năm trước đây, đã nhắc họ viết thư viện diễn viên của riêng họ. Tôi không biết liệu các diễn viên tích hợp của Scala vẫn có cùng một vấn đề mà cộng đồng Lift đã trải qua từ đó. Bạn sẽ phải làm thử nghiệm của riêng bạn để tìm hiểu. (Hoặc có thể ai đó có kinh nghiệm gần đây có thể kêu vang).

Tôi khuyên bạn nên xem thư viện Akka Actors. Nói chung, tôi nghĩ rằng đó là một cải tiến để thực hiện được xây dựng trong Scala. Nó thậm chí có chức năng spawn, thực hiện chính xác những gì bạn đang làm ở đây (tạo một diễn viên xử lý một tin nhắn đơn và chết).

Edit:

Bạn đang niêm yết nói riêng có thể sẽ bị rò rỉ diễn viên, kể từ khi bạn không rõ ràng exit() diễn viên của bạn khi bạn đã hoàn tất với họ.

Sửa 2:

Hóa ra rằng Scala chính nó có một chức năng spawn (Cảm ơn Stefan). Tôi không biết liệu nó có hoạt động tốt hơn các diễn viên Scala hay không.

+0

tôi có một thử nghiệm về đẻ trứng, hoạt động hoàn hảo với rò rỉ bộ nhớ. – jilen

+1

và diễn viên được xây dựng sẵn trong scala vẫn không hoạt động. Tôi bị một OutOfMemory trong thử nghiệm của tôi. – jilen

+0

@ jilen Trên thực tế, OOM của bạn có thể là do bạn không gọi 'exit()' khi bạn đã hoàn thành với diễn viên của mình. – leedm777

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