¿Qué ideas falsas existen que hacen que las personas dejen de usar hilos? [cerrado]

12

Implementar subprocesos en un programa es difícil, sí, sin embargo, ¿por qué es que algunas personas no los implementarán incluso cuando existe una necesidad evidente de ello?

Un ejemplo: el programa tiene que cargar un conjunto de datos desde una base de datos, lo que hay que hacer es realizar la conexión y obtener los datos de la base de datos en un subproceso de trabajo y luego cargarlos en la GUI, dejando el subproceso de la GUI sensible para el usuario.

Pero no, he hablado con personas que parecen pensar que los hilos son malos y malos y todo lo demás, y uno debería evitarlos a toda costa. Incluso he escuchado que algún instructor de la clase desaconsejaba el uso de subprocesos y, por lo tanto, no quería cubrir su uso. ¿QUÉ ???

Con el hardware en varios núcleos, creo que debemos comprender mejor los subprocesos y no tener miedo de usarlos. Me parece un tema fascinante personalmente.

Entonces, ¿cuáles son las cosas que has escuchado acerca de los hilos que son falsos?

    
pregunta Tony The Lion 21.12.2010 - 23:23

7 respuestas

19

El enhebrado es difícil

Claro. Puede ser. Sin embargo, la gente tiene esta idea en su cabeza de que es tan difícil, que no se molestan en intentar resolverlo.

No es que sea imposible.

    
respondido por el Steven Evers 21.12.2010 - 23:38
9

No es la parte de subprocesos la 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 puede indicar al hilo principal que el conjunto de datos está listo para ser accedido? ¿Pasas alrededor de un montón de devoluciones de llamada? ¿Dispersas un montón de variables de verificación a lo largo de 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 los elementos de la GUI que se encuentran en el subproceso principal desde otros subprocesos, por lo que debe evitar que el subproceso principal sepa que cierta información está lista para procesarla.

Realmente no he escuchado nada falso acerca de los hilos. Acabo de leer un montón de estudios de casos de situación en los que la sincronización es un problema cuando el algoritmo que está utilizando no es inherentemente paralelo.

    
respondido por el davidk01 22.12.2010 - 00:04
3

El enhebrado resuelve todos tus problemas

Si tienes problemas de rendimiento, no deberías no saltar al hilo.

Los hilos son ligeros

Los hilos son ligeros en decenas y veinte años. Generar miles de hilos no lo es.

El enhebrado es fácil [Java]

Es fácil crear subprocesos, eso no significa que te beneficiarás de ello.

    
respondido por el Josh K 21.12.2010 - 23:34
1

Eventualmente perderá las ganancias de los subprocesos porque la corrección de errores locos que surgirán del uso de algunas bibliotecas / funciones que no son seguras para subprocesos (de lo que no estaba al tanto) requerirá una sincronización excesiva.

Tienes una probabilidad mucho mayor de encontrar errores que no podrás solucionar si usas hilos cuando no.

    
respondido por el Kamil Szot 22.12.2010 - 05:33
1

Para resumir de forma inteligente por qué los hilos 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) No hay control sobre el flujo de tiempo de ejecución
3) Depuración difícil
4) (Muy pocas veces) compatibilidad con la plataforma: - Las bibliotecas existen para encargarse de esto

Cosas falsas: -
1) Conceptos confusos de funciones seguras para subprocesos y reingresantes
2) Los hilos se ven bien en el papel pero son muy difíciles de implementar

    
respondido por el Manoj R 22.12.2010 - 06:51
1

Si no desea escribir pruebas para su código, entonces no use hilos.

Los subprocesos no son para el programador típico de 'copiar y pegar' que no entiende los fundamentos subyacentes del SO y la arquitectura de la computadora. Dado que el 90% de los programadores solo están familiarizados con Java, estas realmente no son las personas que deberían usar subprocesos. Java hace que los subprocesos sean "fáciles", pero he visto a muchos programadores que piensan que si utilizan estructuras sincronizadas, su código funcionará en subprocesos ... uhm no.

Dicho esto, todos deben comenzar en algún lugar, simplemente no realices tu primer proyecto de subprocesos al actualizar el servidor de back-end de producción de tu empresa.

    
respondido por el cmcginty 22.12.2010 - 04:30
1
  

Un ejemplo: el programa tiene que cargar un conjunto de datos desde una base de datos, lo que hay que hacer es realizar la conexión y obtener los datos de la base de datos en un subproceso de trabajo y luego cargarlos en la GUI, dejando el subproceso de la GUI sensible para el usuario.

No veo que esta situación represente una necesidad de usar subprocesos por al menos 4 razones:

  1. La recuperación de datos debe ser muy rápida.

  2. En muchas aplicaciones de línea de negocios, el usuario no tiene nada que ver con la aplicación en el segundo o dos segundos que está esperando el resultado. Además, el usuario tendrá que esperar hasta que los datos regresen de alguna manera para completar la tarea deseada. La consulta, por otro lado, podría codificarse de forma 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.

  3. En las interfaces basadas en web, los enlaces pueden activarse en relación con el modelo de subprocesamiento.

  4. La creación de subprocesos agrega complejidad a medida que usted lo admite, es posible que algunos desarrolladores de la línea no puedan agregar funciones o depurar códigos complejos.

Mi opinión es: use la función de subprocesos cuando sea necesario porque la capacidad de mantenimiento y la confiabilidad del software son más valiosas para una organización que el código de elegancia.

    
respondido por el NoChance 03.02.2012 - 22:25

Lea otras preguntas en las etiquetas