Pregunta Los hilos de Java no se ejecutan en paralelo?


Hasta ahora tenía la impresión de que 2 hilos que comienzan en el mismo tiempo también se ejecutan en paralelo (ambos ejecutan su código al mismo tiempo), pero recientemente leí documentación y comprendí que en realidad se turnan en el proceso. ejecución de su código, por lo que no hay ningún fragmento de código para el primer subproceso ejecutado al mismo tiempo que un fragmento de código del segundo subproceso. Es mi entendimiento correcto?

En caso afirmativo, ¿cómo multi-threading es más rápido que una ejecución de hilo? Pregunto esto porque la única diferencia es que un único hilo ejecuta el código de forma secuencial, mientras que el multihilo puede tomar turnos en la ejecución, pero aún debe tomar la misma cantidad de tiempo ya que no se hace nada en paralelo.


5
2017-10-06 10:47


origen


Respuestas:


a) en máquinas multiprocesador, los hilos pueden ejecutarse en paralelo (uno por CPU)

b) Si tu hilo llama Thread.sleep() mientras espera IO, etc., hace que los recursos estén disponibles para otros subprocesos. Por lo tanto, las aplicaciones de subprocesos múltiples son en realidad más rápidas que las de un solo subproceso cuando se trata de recursos externos


8
2017-10-06 10:52



Los subprocesos de Java se ejecutan en paralelo si hay suficientes CPU disponible para una JVM. No puede ejecutar 2 cálculos en una máquina con un solo elemento de cálculo al mismo tiempo, por lo que este elemento de cálculo se usa primero o mediante un segundo cálculo en un momento determinado. Probablemente lo que has leído se refiere a estas circunstancias.


3
2017-10-06 10:54



No, los subprocesos de Java se ejecutan en paralelo (a diferencia de otras plataformas como CPython). Sin embargo, si eso proporciona mejoras de rendimiento depende del código que ejecute.

Si prueba con tareas fácilmente paralelizables e intensivas de CPU, como calcular PI con un algoritmo paralelizable o cambiar el tamaño de muchas imágenes, etc., puede demostrar fácilmente que el rendimiento puede aumentarse básicamente de forma lineal (si tiene 2 CPUs = x2, 4 CPUs = x4, etc. .)

EDITAR:
Cuando solo tienes una CPU, los subprocesos múltiples siguen siendo beneficiosos. Por ejemplo, puede tener un hilo leyendo imágenes del disco mientras que el otro hilo cambia el tamaño de las imágenes. Esto también mejorará el rendimiento porque puede utilizar la CPU sin desperdicio.

EDIT2: Cuando lees y redimensionas las imágenes (nota el pluralEn un solo hilo, verá que el uso de la CPU no será del 100% en todo momento. Esto se debe a que, mientras el hilo se lee desde un archivo, no puede realizar el cambio de tamaño. Si tuviera más de un hilo, para cuando un cambio de tamaño haya terminado, otro archivo ya estaría listo en la memoria. Si está tratando con imágenes grandes, es relativamente fácil pegar la CPU al 100% con este diseño.


2
2017-10-06 10:59



Bueno, la respuesta de su pregunta depende de la cantidad de CPU que tenga un sistema. Tenga en cuenta que una sola CPU puede procesar solo un subproceso a la vez, pero el cambio de contexto entre los subprocesos es tan rápido que parece que los subprocesos se ejecutan simultáneamente.

En su segunda pregunta En caso afirmativo, ¿cómo es que el multihilo es más rápido que la ejecución de un hilo?Mutlithreading utiliza los ciclos de la CPU. Decir si un hilo está bloqueado en algún recurso, otros hilos podrían tener la oportunidad de ejecutarse.


En una nota al margen, ve a través de esta página de blog si quieres ver algunos tutoriales básicos de subprocesos múltiples http://javasolutionsonline.blogspot.in/p/java-concurrency.html


1
2017-10-06 11:09



umm..threads se ejecutan en paralelo ... pero no en sus PC convencionales que tenían núcleos individuales ... Si tiene un chip de varios núcleos o muchas CPU, entonces pueden ejecutarse en paralelo. imaginar un hilo que se ejecuta en cada uno de los cuatro núcleos ...

hilo te da muchas otras ventajas también, como ya debes saber


-1
2017-10-06 11:05



Preguntas populares