Tạo cái pool có 8 thread, lúc nào 1 task bất kì xong thì task thứ 9 được thực thi. Em nghĩ thế : shame:
Thread pool mục đích một là để tái sử dụng threads, tiết kiệm tài nguyên khi create/destroy threads mới, hai là để khống chế lượng tài nguyên dùng cùng lúc, tránh bùng nổ quá nhiều threads. Nếu chỉ có đúng 9 requests thì là quá ít, cần thread nào cứ tạo mới thread ấy, pool đâu có tối ưu thêm dc gi?
Để đưa ra câu trả lời thì cần làm rõ ngữ cảnh, muốn tối ưu phải biết nó nghẽn ở vấn đề nào chứ ko thể tối ưu mọi thứ dc. Kể vài vấn đề cơ bản:
1. Yêu cầu tối ưu cái gì?: giải quyết 9 requests nhanh nhất có thể? tốn ít tài nguyên nhất có thể(RAM, CPU)? Cân bằng giữa tốc độ xử lý và sử dụng tài nguyên?
2. Máy tính còn chạy tác vụ nặng nào khác ko hay chủ yếu chỉ chạy mỗi cái tác vụ đề bài cho? Cần phân phối tài nguyên hợp lý chứ ko dồn hết cho một tác vụ được.
3 Các requets này có đăc điểm gì: chỉ có đúng 9 requests, hay 9 requests đến cùng lúc, rồi tiếp theo lại 9 requests khác? requests nặng về CPU hay nặng về I/O?
- Nếu Nặng về CPU thì có thể dùng nhiều threads để xử lý(cân nhắc thread pools) , nhưng nếu quá nặng về tính toán trên CPU mà gần như ko có IO(hiếm gặp) thì ko nên tạo 8 threads vì cùng lúc bị chiếm hết cả 8 cpu sẽ treo máy, ko còn tài nguyên CPU để xử lý task khác, thậm chí ko còn cả CPU để nhận request thứ 9
- Nếu nặng về IO, nhẹ về CPU thì ko cần nhiều thread. Chỉ cần 1 thread dùng cơ chế Non-blocking I/O là đủ
Một mô hình phổ biến là có 1 thread lắng nghe requests đến và nhiều worker threads để xử lý từng request.
p/s: Trên là vài vấn đề cơ bản, thực tế có rất nhiều yếu tố nữa tác động đê đưa ra giải pháp: các requests này là độc lập hay liên quan gì đến nhau? Yêu cầu về thời gian phát triển phần mềm ntn? etc. Và đây là câu hỏi phỏng vấn chứ ko phải vấn đề cụ thể trên thực tế, chủ yếu ứng viên chém sao cho bay bổng, khoe kiến thức, khoe suy luận