Soy nuevo en el roscado y quiere hacer algo similar a esta pregunta:El uso de múltiples hilos de bucle
Speed up loop using multithreading in C# (Question)
Sin embargo, no estoy seguro de si esa solución es la mejor para mí, como yo quiero que sigan corriendo y nunca terminen. (También estoy usando .NET 3.5 en lugar de 2.0 como para esa pregunta.)
quiero hacer algo como esto:
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
}
}
¿Un ThreadPool ser la mejor solución o hay algo que se adapte ¿esto mejor?
Actualización: ¡Gracias por todas las buenas respuestas! Pensé en explicar el caso de uso con más detalle. Varios agentes pueden subir archivos a una carpeta. Cada agente tiene su propia carpeta a la que pueden cargar activos (archivos csv, imágenes, pdfs). Nuestro servicio (se supone que es un servicio de Windows que se ejecuta en el servidor al que cargan sus activos, puede estar seguro de que volveré con preguntas sobre los servicios de Windows próximamente :)) seguirá revisando la carpeta de cada agente si hay nuevos activos allí. , y si los hay, la base de datos se actualizará y para algunas de ellas se crearán páginas html estáticas. Como podría llevarles un tiempo cargar todo y queremos que puedan ver sus cambios cargados de manera directa, pensamos que un hilo por agente sería una buena idea ya que ningún agente necesita esperar a que alguien más lo haga. terminar (y tenemos múltiples procesadores, así que queríamos usar su capacidad total). Espero que esto lo explique!
Gracias,
Annelie
Un poco de tangente, pero es posible que desee tratar de hacer que los hilos sean un poco más impulsados por eventos en lugar de ejecutarse en un circuito cerrado. Correr en un círculo cerrado de esa manera probablemente terminará martillando su procesador y desperdiciando recursos, y haciendo que los hilos que tienen trabajo real que hacer simplemente se queden sentados por períodos de tiempo más largos. – Kitsune
Más hilos no son necesariamente la respuesta y pueden convertirse en un problema. Entonces diga que tiene 20 agentes y genera un hilo para cada uno. El archivo de E/S siempre será un cuello de botella, por lo que tiene 20 subprocesos que sondean constantemente el sistema de archivos en busca de cambios, lo que tendrá un impacto negativo en el rendimiento. Cada uno de esos subprocesos también usará tiempo de CPU para ese sondeo, por lo que en un recuadro de cuatro núcleos cada núcleo recibiría cinco de estos subprocesos (suponiendo 20 agentes), por lo que un subproceso que está haciendo un trabajo real (procesamiento los nuevos archivos) se intercambiarán para permitir la ejecución del sondeo. – Ragoczy