Actualmente siento que estoy usando en exceso los subprocesos múltiples.
Tengo 3 tipos de datos, A, B y C.
Cada uno A
se puede convertir a múltiples B
sy cada uno B
se puede convertir a múltiples C
s.
Solo estoy interesado en tratar el C
s.
Podría escribir esto con bastante facilidad con un par de funciones de conversión. Pero me sorprendí implementarlo con hilos, tres colas ( queue_a
, queue_b
y queue_c
). Hay dos hilos que realizan las diferentes conversiones, y un trabajador:
ConverterA
leequeue_a
y escribe enqueue_b
ConverterB
leequeue_b
y escribe enqueue_c
Worker
maneja cada elemento dequeue_c
Las conversiones son bastante mundanas, y no sé si este modelo es demasiado complicado. Pero me parece extremadamente robusto. Cada "convertidor" puede comenzar a funcionar incluso antes de que los datos lleguen a las colas, y en cualquier momento en el código puedo simplemente "enviar" nuevos A
mensajes de correo B
electrónico y activará la canalización de conversión que a su vez activará un trabajo por parte del trabajador hilo.
Incluso el código resultante parece más simple. Pero todavía no estoy seguro si estoy abusando de hilos para algo simple.
fuente
Respuestas:
Casi siempre es más simple pensar de forma secuencial, y luego modificar esa lógica para que funcione mejor usando hilos. Y, como dice la expresión, "Si no está roto, no lo arregles". La mayoría de los programadores no usan hilos simplemente porque no hay necesidad de usarlos.
Si te sientes más cómodo usándolos, más poder para ti. Sin embargo, sepa que si los hilos no ofrecen un aumento de velocidad al eliminar los cuellos de botella, es muy probable que estén ralentizando su programa.
También considere que los sistemas que dedican solo una CPU a un proceso simularán múltiples hilos por un solo hilo para ahorrar recursos (esto no sucede a menudo con las computadoras modernas, aunque las aplicaciones de teléfonos inteligentes todavía están muy sujetas a este abuso). En este caso, incluso si elimina los cuellos de botella mediante el uso de hilos, en realidad será más lento que si no usara hilos.
Y, quizás la razón más sutil para tener precaución al usar hilos, pero ciertamente no es el menos importante, los hilos tienden a hacer lo que no esperas. Sí, si está tomando precauciones, debería estar bien. Sí, si sus hilos no escriben en variables compartidas entre hilos, debería estar bien. Dicho esto, los errores relacionados con hilos son muy difíciles de encontrar. Como soy de la idea de que un programador no puede eliminar por completo la posibilidad de crear errores en el código y, por lo tanto, un programador debe tomar medidas para protegerse contra posibles errores en lugar de centrarse en eliminarlos por completo, definitivamente debe aplicar esta idea a para encontrar errores de hilo también. En otras palabras, sepa que a pesar de sus mejores esfuerzos,
Entonces, ¿deberías usar hilos de todos modos? Bueno, un conocimiento saludable de los hilos ciertamente no es algo malo, especialmente si te vuelves bueno en eso. Sin embargo, el movimiento en los últimos tiempos ha sido hacia lenguajes de un solo hilo como node.js. Una de las principales ventajas de tener un solo subproceso es que es fácil de escalar y se pueden hacer ciertas optimizaciones si sabe que se espera que las instrucciones se ejecuten secuencialmente (incluso si las optimizaciones pueden significar que las instrucciones que se pueden ejecutar en paralelo pueden ejecutarse de forma asincrónica).
Dicho esto, digo que hagas lo que sea más cómodo para ti. En mi experiencia, escribir un programa que entiendes tiene mayor prioridad que hacerlo funcionar más rápido. Solo asegúrate de usar hilos cuando creas que te ayuda a escribir el programa, y no porque quieras que funcione más rápido, ya que no deberías preocuparte tanto por el rendimiento como cuando escribes el programa (la optimización es importante, pero También puede esperar).
fuente