2010-07-07 21 views
5

Tôi tự hỏi đâu là bờ vực mà sau đó một hồ bơi thread nên được sử dụng. Tôi có thể tạo bao nhiêu chủ đề mới mỗi giây mà không cần sử dụng nhóm chủ đề vẫn tránh được hình phạt hiệu suất đáng chú ý?Chi phí tạo luồng mới trong Java là bao nhiêu? Khi nào chúng ta nên xem xét việc sử dụng một hồ bơi thread?

Có bất kỳ triển khai nhóm luồng nguồn mở quan sát nào không?

Trả lời

4

Xem xét chi phí, câu trả lời hợp lệ duy nhất là tự mình kiểm tra (cách không thanh lịch để cho bạn biết rằng tôi chưa bao giờ làm bài kiểm tra đó, và sẽ không bao giờ làm điều đó./cơ chế phá hủy).

Thực hiện việc triển khai hiện có, các phiên bản Java hiện đại (bắt đầu bằng Java 5) cung cấp các lớp con khác nhau của ThreadPoolExecutor kết hợp các lợi ích của một nhóm luồng với các khái niệm hiện đại nhất của java.util.concurrent: Executors.

Bên cạnh đó, tôi sẽ không bao giờ recommand đủ để bạn quên về Chủ đề và để repalce chúng với Runnable, có thể gọi và các đối tượng tính toán tiên tiến khác. Bằng cách này, bạn có thể dễ dàng chuyển đổi việc thực hiện các Executors.

+0

Lớp công cụ tĩnh tiện ích đơn giản cung cấp để tạo một thể hiện của ThreadPoolExecutor được cấu hình dựa trên phương thức được gọi. –

5

Bạn nên luôn sử dụng nhóm chủ đề. Không chỉ cho hiệu suất, mà còn dễ sử dụng, gói java.util.concurrent cung cấp cho bạn. Với Java 5 trở lên, việc nhóm luồng được tích hợp.

Thay vì suy nghĩ về 'chủ đề', hãy sử dụng giao diện Executor để thực hiện các tác vụ bạn cần thực hiện. Tạo một hồ bơi thread mới cũng đơn giản như:

Executor executor = Executors.newFixedThreadPool(5); 

tài liệu hướng dẫn đầy đủ trên bao bì java.util.concurrent là ở đây: http://java.sun.com/javase/6/docs/api/java/util/concurrent/package-frame.html

0

đề tạo luôn là tốn kém, bất kể nền tảng này. Thời gian thực tế để tạo chuỗi phụ thuộc vào hệ điều hành.

Tôi khuyên bạn nên sử dụng nhóm chủ đề nếu bạn tạo các chuỗi chỉ tồn tại rất thường xuyên. Ví dụ, nếu nhiệm vụ chính của ứng dụng của bạn là để phục vụ các nhiệm vụ ngắn ngủi như vậy, một nhóm luồng sẽ rất đẹp.

Nhóm chủ đề cũng tốt nếu bạn tạo quá nhiều chuỗi. Chuyển đổi ngữ cảnh giữa các luồng cũng có thể giết hiệu suất. Dài câu chuyện ngắn, trên kiến ​​trúc PC quad-core hiện đại, bạn nên hướng đến không có quá 200 luồng chạy cùng một lúc.

+2

Ai đó đã đo được điều này khi trả lời một câu hỏi ở đây: http://stackoverflow.com/questions/2117072/java-thread-creation-overhead Ông đã tạo ra 10.000 chủ đề mỗi giây, do đó, điều đó không quá đắt. –

+0

Tạo chủ đề có thể được ok, như trong Java tôi nghĩ rằng các chủ đề thực tế được tạo ra chỉ khi phương thức thread bắt đầu. Tuy nhiên, 10.000 chủ đề là một kẻ giết người hiệu suất do chuyển đổi ngữ cảnh. – Nick

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