Vì vậy, tôi có một chương trình sinh ra các luồng (~ 5-150) thực hiện một loạt các nhiệm vụ. Ban đầu tôi đã sử dụng FixedThreadPool
vì this similar question đề nghị chúng phù hợp hơn với các công việc lâu hơn và với kiến thức rất hạn chế về đa luồng, tôi coi cuộc sống trung bình của chủ đề (vài phút) "long lived".FixedThreadPool vs CachedThreadPool: ít hơn của hai tệ nạn
Tuy nhiên, gần đây tôi đã thêm khả năng tạo ra các chuỗi bổ sung và làm như vậy sẽ đưa tôi vượt quá giới hạn chuỗi mà tôi đã đặt. Trong trường hợp này, nó sẽ là tốt hơn để đoán và tăng số lượng chủ đề tôi có thể cho phép hoặc chuyển sang một CachedThreadPool
vì vậy tôi không có chủ đề lãng phí?
Đang cố gắng cả hai ra sơ, có không vẻ là một sự khác biệt vì vậy tôi có khuynh hướng đi với CachedThreadPool
chỉ để tránh lãng phí. Tuy nhiên, tuổi thọ của các chủ đề có nghĩa là tôi nên chọn một FixedThreadPool
và chỉ xử lý các chủ đề không được sử dụng? This question làm cho nó có vẻ như những chủ đề phụ không lãng phí nhưng tôi sẽ đánh giá cao làm rõ.
Đôi khi không có lựa chọn nào tốt hơn, bạn chỉ có thể có 1 lõi CPU nhưng nếu bạn đang chạy máy chủ trong đó mọi yêu cầu của người dùng sẽ kích hoạt chuỗi để xử lý yêu cầu, sẽ không có bất kỳ lựa chọn hợp lý nào khác, đặc biệt nếu bạn có kế hoạch mở rộng quy mô máy chủ khi bạn phát triển cơ sở người dùng của mình. – mFeinstein
@mFeinstein Làm thế nào người ta không có lựa chọn nếu một người ở vị trí chọn triển khai nhóm luồng?Trong ví dụ của bạn với 1 lõi CPU chỉ sinh ra nhiều luồng hơn, đơn giản là không có ý nghĩa gì, nó hoàn toàn phù hợp với ví dụ của tôi bằng cách sử dụng FixedThreadPool. Điều đó cũng dễ dàng cân nhắc, đầu tiên với trên hoặc hai luồng công nhân, sau đó với 10 hoặc 15 tùy thuộc vào số lượng lõi. –
Phần lớn các triển khai máy chủ web sẽ tạo một chuỗi mới cho mỗi yêu cầu HTTP mới ... Chúng sẽ không quan tâm đến số lõi thực tế của máy, điều này giúp việc triển khai đơn giản và dễ dàng hơn. Điều này áp dụng cho nhiều thiết kế khác mà bạn chỉ muốn mã một lần và triển khai, và không phải biên dịch lại và triển khai lại nếu bạn thay đổi máy, đó có thể là một cá thể đám mây. – mFeinstein