2009-09-29 37 views
12

"Chi phí" thô của việc sử dụng các chuỗi trong java là gì? Có bất kỳ quy tắc nào của các ngón tay cái/giá trị thực nghiệm, bộ nhớ tạo ra bao nhiêu chi phí cho một bộ nhớ không? Có một ước tính sơ bộ bao nhiêu chu kỳ CPU nó chi phí để tạo ra một sợi?"Chi phí" thô của Chủ đề trong chu trình và bộ nhớ CPU là gì?

Bối cảnh: Trong một servlet của ứng dụng web, tôi muốn song song việc tạo nội dung vì các phần của nội dung dựa trên tệp, dựa trên cơ sở dữ liệu cũng như dựa trên web. Nhưng điều này có nghĩa là đối với mỗi "http-request-thread" (của container serlvet của tôi), tôi sẽ có thêm hai đến bốn luồng. Lưu ý rằng tôi sẽ sử dụng ExecutorService trong Java 6.

Tôi nên mong đợi điều gì khi sử dụng hàng trăm đến hàng nghìn chuỗi Java trên máy chủ web?

Trả lời

13

Mỗi luồng có ngăn xếp riêng và do đó có tác động bộ nhớ tức thì. Kích thước ngăn xếp luồng mặc định là, IIRC, cho Java 6, 512k (các JVM/phiên bản khác nhau sẽ có thể có các giá trị mặc định khác nhau). Con số này có thể điều chỉnh được bằng cách sử dụng tùy chọn -Xss. Do đó, việc sử dụng hàng trăm luồng sẽ có tác động lên bộ nhớ mà máy ảo tiêu thụ (khá có thể trước bất kỳ tác động nào của CPU trừ khi các luồng đó đang chạy).

Tôi đã thấy khách hàng gặp sự cố liên quan đến chủ đề/bộ nhớ, vì đó không phải là liên kết rõ ràng. Đó là tầm thường để tạo ra 100.000 chủ đề (sử dụng thực thi/hồ bơi vv) và các vấn đề bộ nhớ không xuất hiện để được ngay lập tức do điều này.

Nếu bạn đang phục vụ nhiều khách hàng, bạn có thể muốn xem API Java NIO và cụ thể là multiplexing, cho phép lập trình mạng không đồng bộ. Điều đó sẽ cho phép bạn xử lý nhiều khách hàng chỉ với một luồng, và do đó làm giảm yêu cầu của bạn cho một số lượng lớn các luồng.

1

Điều đó tùy thuộc: Nó phụ thuộc vào hệ điều hành, phiên bản Java và CPU. Cách duy nhất để tìm ra điều này là thử và đo lường kết quả.

Vì bạn sẽ sử dụng số ExecutorService, việc kiểm soát số lượng chuỗi sẽ đơn giản. Không sử dụng quá ít hoặc yêu cầu sẽ chồng lên nhau. Nếu bạn sử dụng quá nhiều, bạn sẽ gặp phải sự cố về hiệu suất với hệ thống tệp của mình và DB lâu trước khi chạy hết đề tài.

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