En uno de mis proyectos que es algo así como un agregador, analizo feeds, podcasts y demás desde la web.Debo usar ThreadPools o Task Parallel Library para operaciones IO-bound
Si uso un enfoque secuencial, dado que hay una gran cantidad de recursos, lleva bastante tiempo procesarlos todos (debido a problemas de red y cosas similares);
foreach(feed in feeds)
{
read_from_web(feed)
parse(feed)
}
Así que desea implementar la concurrencia y no podía decidir si debería utilizar básicamente ThreadPools para procesar con subprocesos de trabajo o simplemente confiar en TPL para conseguir resolver el problema.
ThreadPools seguro me encargará el trabajo con hilos de trabajo y obtendré lo que espero (y en entornos de CPU multi-core, los otros núcleos también se utilizarán también).
pero todavía quiero considerar TPL también, ya que es recomienda método, pero estoy un poco preocupado por él. En primer lugar, sé que TPL utiliza ThreadPools, pero agrega una capa adicional de toma de decisiones. Me preocupa sobre todo la condición de que esté presente un entorno de núcleo único. Si no me equivoco, TPL comienza con un número de hilos de trabajo igual al número de núcleos de CPU disponibles desde el principio. Temo que TPL produzca resultados similares al enfoque secuencial para mi caso vinculado a IO.
Entonces, para las operaciones vinculadas a IO (en mi caso, leer recursos de la web), ¿es mejor utilizar ThreadPools y controlar las cosas, o mejor simplemente confiar en TPL? ¿Se puede utilizar TPL en escenarios vinculados a IO?
actualización: Mi principal preocupación es que - en un entorno de un solo núcleo de la CPU se TPL simplemente comportarse como enfoque secuencial o va a seguir ofreciendo la concurrencia? Ya estoy leyendo Parallel Programming with Microsoft .NET y el book pero no pude encontrar una respuesta exacta para esto.
Nota: esto es una nueva redacción de mi pregunta anterior [Is it possible to use thread-concurrency and parallelism together?] que fue bastante fraseada mal.
+1 Para resolver su problema utilizando un enfoque científico. Si no me equivoco, todas las tecnologías anteriores usan el grupo de subprocesos, lo que explica los resultados similares. En general, me gusta usar las extensiones paralelas porque la sintaxis es muy simple y soy vago. –
He fomentado la limpieza de las fuentes; https://github.com/raistlinthewiz/concurrency-tests – HuseyinUslu
Gracias por revisar todo el trabajo para hacer la prueba. – GregoryBrad