La implementación de subprocesos en un programa es difícil, sí, sin embargo, ¿por qué algunas personas no los implementarán incluso cuando existe una necesidad obvia?
Un ejemplo: el programa tiene que cargar un conjunto de datos desde una base de datos, lo que debería hacer sería hacer la conexión y obtener los datos de la base de datos en un subproceso de trabajo y luego cargarlos en la GUI, dejando que el subproceso de la GUI responda para el usuario .
Pero no, he hablado con personas que parecen pensar que los hilos son malos y malos, y que uno debería evitarlos a toda costa. Incluso he oído que algún instructor de clase desaconsejó el uso de hilos y, por lo tanto, no quiso cubrir su uso. ¿¿¿QUÉ???
Con el hardware entrando en múltiples núcleos, creo que debemos entender mejor los hilos y no tener miedo de usarlos. Me parece un tema fascinante personalmente.
Entonces, ¿qué son las cosas que has escuchado sobre el enhebrado que son falsas?
fuente
Respuestas:
Enhebrar es difícil
Seguro. Puede ser. Sin embargo, las personas tienen esta idea en la cabeza de que es tan difícil, que no se molestan en tratar de resolverlo.
No es que sea imposible.
fuente
await
/async
palabras clave :)No es la parte de subprocesos lo que es difícil, sino la necesidad de sincronización y todo lo demás que viene con el uso de subprocesos. En su ejemplo de GUI, ¿cómo le dice al hilo principal que el conjunto de datos está listo para acceder? ¿Pasa un montón de devoluciones de llamada? ¿Dispersas un montón de variables de verificación en tu código? En algunos modelos de GUI, por ejemplo, Silverlight, hay algo que se llama afinidad de subprocesos, lo que significa que no puede acceder a elementos de GUI que se encuentran en el subproceso principal desde otros subprocesos, por lo que debe apartarse de su camino para que el subproceso principal sepa que cierta información es Listo para ser procesado aún más.
Realmente no he escuchado nada falso sobre hilos. Acabo de leer un montón de estudios de casos situacionales sobre la sincronización como una perra cuando el algoritmo que está utilizando no es inherentemente paralelo.
fuente
Enhebrar resuelve todos tus problemas
Si usted está teniendo problemas de rendimiento se debe no ir directamente a rosca.
Los hilos son livianos
Los hilos son livianos en decenas y veinte años. Engendrar miles de hilos no lo es.
Enhebrar es fácil [Java]
Es fácil crear hilos, eso no significa que se beneficiará de ellos.
fuente
Eventualmente perderá cualquier ganancia de subprocesos porque la reparación de errores locos que surgirán del uso de algunas bibliotecas / funciones que no son seguras para subprocesos (lo que no sabía) requerirá una sincronización excesiva.
Tiene una probabilidad mucho mayor de encontrar errores que no podrá corregir si usa hilos cuando no lo hace.
fuente
Para resumir puntualmente por qué los subprocesos son difíciles de usar: -
Cosas verdaderas 1) Necesita la sincronización y decisiones de diseño cuidadosas sobre qué bloquear y cuándo bloquear
2) Sin control sobre el flujo del tiempo de ejecución
3) Depuración difícil
4) (Muy pocos veces) compatibilidad de plataforma: - Las bibliotecas existen para encargarse de esto
Cosas falsas: -
1) Conceptos confusos de funciones seguras y seguras para subprocesos
2) Los subprocesos se ven bien en el papel pero son muy difíciles de implementar
fuente
Si no desea escribir pruebas para su código, no use hilos.
Los subprocesos no son para el programador típico de "copiar y pegar" que no comprende los fundamentos subyacentes del sistema operativo y la arquitectura de la computadora. Dado que el 90% de los programadores solo están familiarizados con Java, estas no son realmente las personas que deberían usar hilos. Java hace que los hilos sean "fáciles", pero he visto muchos programadores que piensan que si usan estructuras sincronizadas su código funcionará en hilos ... uhm no.
Dicho esto, todo el mundo necesita comenzar en algún lugar, simplemente no haga su primer proyecto de subprocesos para actualizar el servidor de back-end de producción de su empresa.
fuente
No veo que esta situación represente una necesidad de usar subprocesos por al menos 4 razones:
La recuperación de datos debe ser muy rápida.
En muchas aplicaciones de la línea de negocios, el usuario no tiene nada que ver con la aplicación en el segundo o segundo que está esperando el resultado. Además, el usuario tendrá que esperar hasta que los datos vuelvan para completar la tarea deseada. La consulta, por otro lado, podría codificarse de manera inteligente de modo que solo recupere una página llena de información a la vez y otras técnicas de optimización podrían ayudar al tiempo de respuesta.
En las interfaces basadas en web, los enlaces pueden activarse con respecto al modelo de subprocesos.
El enhebrado agrega complejidad como usted admite, algunos desarrolladores en el futuro pueden no ser capaces de agregar funciones o depurar código complejo.
Mi opinión es: utilice el subproceso cuando sea necesario porque la capacidad de mantenimiento y la confiabilidad del software son más valiosas para una organización que la elegancia del código.
fuente