Tôi mới đến luồng và muốn làm điều gì đó tương tự như câu hỏi này:Sử dụng đa luồng cho vòng lặp
Speed up loop using multithreading in C# (Question)
Tuy nhiên, tôi không chắc chắn nếu giải pháp đó là tốt nhất đối với tôi như tôi muốn họ tiếp tục chạy và không bao giờ kết thúc. (Tôi cũng đang sử dụng .net 3.5 chứ không phải 2.0 như đối với câu hỏi đó.)
tôi muốn làm một cái gì đó như thế này:
foreach (Agent agent in AgentList)
{
// I want to start a new thread for each of these
agent.DoProcessLoop();
}
---
public void DoProcessLoop()
{
while (true)
{
// do the processing
// this is things like check folder for new files, update database
// if new files found
}
}
có một ThreadPool là giải pháp tốt nhất hoặc là có cái gì đó phù hợp với điều này tốt hơn?
Cập nhật: Cảm ơn tất cả các câu trả lời tuyệt vời! Tôi nghĩ tôi sẽ giải thích trường hợp sử dụng chi tiết hơn. Một số tác nhân có thể tải tệp lên một thư mục. Mỗi tác nhân có thư mục riêng của họ để họ có thể tải nội dung lên (tệp csv, hình ảnh, pdf). Dịch vụ của chúng tôi (nó có nghĩa là một dịch vụ windows chạy trên máy chủ họ tải tài sản của họ lên, yên tâm tôi sẽ quay trở lại với các câu hỏi về dịch vụ windows đôi khi sớm :)) sẽ tiếp tục kiểm tra thư mục của mỗi đại lý nếu có bất kỳ tài sản mới nào và nếu có, cơ sở dữ liệu sẽ được cập nhật và cho một số trang tĩnh được tạo. Có thể mất một lúc để họ tải lên mọi thứ và chúng tôi muốn họ có thể thấy các thay đổi được tải lên của họ khá nhiều ngay lập tức, chúng tôi nghĩ rằng một chuỗi cho mỗi tác nhân sẽ là một ý tưởng hay vì không có đại lý nào cần đợi người khác kết thúc (và chúng tôi có nhiều bộ xử lý nên muốn sử dụng toàn bộ dung lượng của chúng). Hy vọng điều này giải thích nó!
Cảm ơn,
Annelie
Một chút của một tiếp tuyến, nhưng bạn có thể muốn cố gắng để làm cho các chủ đề hơn một chút sự kiện điều khiển hơn là chạy trong một vòng lặp chặt chẽ. Chạy trong một vòng lặp chặt chẽ như vậy có thể sẽ chỉ kết thúc búa xử lý của bạn và lãng phí tài nguyên, cũng như làm cho các chủ đề có công việc thực sự để làm chỉ ngồi xung quanh cho thời gian dài hơn. – Kitsune
Chủ đề khác không nhất thiết phải là câu trả lời và có thể trở thành một vấn đề. Vì vậy, giả sử bạn có 20 tác nhân và sinh ra một chuỗi cho mỗi chủ đề. File i/o luôn luôn là một nút cổ chai, vì vậy bạn có 20 chủ đề liên tục bỏ phiếu cho hệ thống tập tin để thay đổi - đó sẽ là một tác động tiêu cực đến hiệu năng. Mỗi chủ đề này cũng sẽ sử dụng thời gian CPU cho việc bỏ phiếu đó, do đó, trên một hộp bốn nhân, mỗi lõi sẽ bị tấn công với năm trong số các chủ đề này (giả sử 20 tác nhân). các tệp mới) sẽ được hoán đổi để cho phép bỏ phiếu thực thi. – Ragoczy