2011-12-09 12 views
9

Tôi đang chạy chương trình lắp ráp bộ gen * Trinity, http://trinityrnaseq.sourceforge.net/, nếu thích) trên một trong các tài nguyên XSEDE. Phần cứng giới hạn số lượng các chủ đề đến 2500, mà chương trình luôn luôn muốn vượt quá ... Nó có một cách dễ dàng để hạn chế số lượng các chủ đề thực hiện? Tôi đã thử -XX:ParallelGCThreads=16, nhưng điều này dường như giới thiệu các lỗi mới.Khi chạy, làm thế nào tôi có thể giới hạn số lượng các chủ đề java

Vì vậy, có một lệnh thời gian chạy để giới hạn tổng số luồng không ??

+4

Vấn đề là, ngay cả khi bạn có thể yêu cầu JVM giới hạn số lượng luồng, logic ứng dụng Trinity vẫn cố gắng thu được nhiều luồng hơn và do đó sẽ thất bại (hoặc chặn) khi chạy. Có vẻ như bạn thực sự muốn vá bộ mã hóa Trinity để sử dụng một chiến lược tạo luồng/tạo luồng khác, và điều đó sẽ lấy nguồn của chúng và thay đổi nó. –

+0

Tôi đã đọc các tài liệu về Trinity và thấy tùy chọn --CPU. Bạn đã thử chưa – user949300

+0

Tôi đã đọc các tài liệu về Trinity và thấy tùy chọn --CPU. Bạn đã thử chưa – user949300

Trả lời

0

Bạn có thể sử dụng hàng đợi tùy chỉnh chạy dưới dạng một quy trình riêng để xử lý số lượng giới hạn chuỗi. Ưu điểm của việc này là bạn có thể chọn giới hạn chủ đề hoặc bạn vẫn có thể tiếp tục thêm số lượng chủ đề. Bạn có thể sẽ có một lớp học addToQueue(Thread t) và sau đó một người tiêu dùng tiêu thụ tất cả các chủ đề này. Hàng đợi sẽ biết số lượng chủ đề đang hoạt động. Quá trình daemon sẽ kích hoạt phương thức consume() của hàng đợi này nếu các luồng nằm trong phạm vi. Và sau khi tất cả các chủ đề kết thúc hoặc compeltes nó công việc, nó báo cáo trở lại hàng đợi. Hàng đợi mà bạn duy trì có thể là hàng đợi ưu tiên nếu bạn cảm thấy cần ưu tiên cho các tác vụ đang chạy. Điều này không chỉ loại bỏ sự phụ thuộc vào JVM mà còn làm cho chương trình của bạn trông sạch hơn.

2

Sử dụng Executor hoặc ExecutorService. Có những gì bragboy gợi ý nhưng nó được xây dựng trong Java.