¿Qué significa multiproceso?
Cuando se trata de subprocesos múltiples, tenemos que hablar de qué es un subproceso; cuando se trata de subprocesos, tenemos que hablar de qué es un proceso.
El proceso es una colección de actividades en tiempo de ejecución relacionadas con los datos de un programa de computadora. Es la unidad básica de asignación y programación de recursos en el sistema y la base de la estructura del sistema operativo. En las primeras arquitecturas informáticas orientadas a procesos, el proceso era la entidad de ejecución básica del programa; en la arquitectura informática contemporánea orientada a subprocesos, el proceso es el contenedor de subprocesos. Un programa es una descripción de instrucciones, datos y su organización, mientras que un proceso es la entidad del programa.
Un proceso puede entenderse simplemente como una unidad de programa que puede ejecutarse de forma independiente. Es una colección de subprocesos. Un proceso contiene uno o más subprocesos y cada subproceso es una ruta de ejecución en el proceso.
Con tantos subprocesos, es fácil de entender: multi-threading es la ejecución simultánea de múltiples rutas de ejecución (threads) en un proceso.
¿Por qué utilizar subprocesos múltiples?
1. En el programa, hay muchas operaciones que requieren mucho tiempo, como lectura y escritura de bases de datos, operaciones IO, etc. Si usa un solo hilo, el programa tendría que esperar a que se completen estas operaciones antes de poder realizar otras operaciones. Con el subproceso múltiple, las tareas de larga duración pueden continuar en segundo plano mientras se realizan otras operaciones.
2. Puede mejorar la eficiencia del programa.
3. El subproceso múltiple es muy útil en algunas tareas en espera, como la entrada del usuario, la lectura de archivos, etc.
Desventajas:
1. El uso de demasiados subprocesos consumirá recursos del sistema porque los subprocesos necesitan abrir memoria. Más subprocesos requieren más memoria.
2. Afecta el rendimiento del sistema porque el sistema operativo necesita alternar entre subprocesos.
3. Es necesario considerar el impacto de las operaciones de subprocesos en el programa, como la suspensión de subprocesos, la suspensión y otras operaciones en el programa.
4. El uso inadecuado de los hilos causará muchos problemas.
Resumen: el subproceso múltiple es asíncrono, pero esto no significa que el subproceso múltiple realmente signifique que se estén ejecutando varios subprocesos al mismo tiempo. De hecho, el sistema cambia constantemente entre subprocesos (. porque la velocidad de cambio del sistema es muy rápida, por lo que nos da la ilusión de estar corriendo al mismo tiempo).
2. La conexión entre subprocesos múltiples y alta concurrencia.
Alta concurrencia: la alta concurrencia se refiere a la situación en la que el sistema encuentra "una gran cantidad de solicitudes de operación en un corto período de tiempo" durante la operación, lo que se manifiesta principalmente en el acceso centralizado de una gran cantidad de. sistemas web o la recepción concentrada de una gran cantidad de solicitudes por puertos de socket (por ejemplo: compra de boletos 12306; evento Tmall Double Eleven). ). La ocurrencia de esta situación hará que el sistema realice una gran cantidad de operaciones durante este período, como solicitudes de recursos, operaciones de bases de datos, etc. Si la alta concurrencia no se maneja bien, no solo reducirá la experiencia del usuario (el tiempo de respuesta de la solicitud es demasiado largo), sino que también puede provocar un tiempo de inactividad del sistema. En casos graves, incluso puede provocar excepciones OOM y el sistema deja de funcionar. Si desea que el sistema pueda adaptarse a una alta concurrencia, debe optimizar el sistema desde todos los aspectos, incluido el hardware, la red, la arquitectura del sistema, la elección del lenguaje de desarrollo, el uso de estructuras de datos, la optimización de algoritmos, la optimización de bases de datos...
El subproceso múltiple es solo una de las formas de resolver problemas de alta concurrencia. Desde la misma perspectiva/asincrónica, el subproceso múltiple es una forma de utilizar simultáneamente recursos informáticos inactivos.
La función de los subprocesos múltiples en problemas de alta concurrencia es hacer un uso completo de los recursos de la computadora para que puedan alcanzar la máxima utilización en cada momento, en lugar de desperdiciar recursos de la computadora y dejarlos inactivos.
3. Introducción a la creación, detención y métodos comunes de subprocesos.
1. Creación de subprocesos:
Hay dos formas principales de crear subprocesos. Una es heredar la clase Thread y anular el método de ejecución (la clase Thread implementa la interfaz Runable; )
p>
El otro es implementar la interfaz Runable y también necesita reescribir el método de ejecución.
El hilo se inicia llamando al método start().
También podemos usar directamente el método de ejecución del objeto de subproceso, pero cuando se usa directamente, el método de ejecución es solo un método normal.
Otros métodos incluyen: creación a través de métodos de clases internas anónimas; implementación de la interfaz Callable. . . . .
2. Métodos de subprocesos comunes:
método currentThread(): este método devuelve la información del subproceso actual. getName () puede devolver el nombre del hilo.
Método isAlive(): este método se utiliza para determinar si el hilo actual está activo.
método sleep(): este método se utiliza para hacer que el "hilo que se está ejecutando actualmente" duerma durante un tiempo específico. El hilo que se está ejecutando actualmente es el hilo devuelto por this.currentThread().
Método getId(): Este método se utiliza para obtener el identificador único del hilo.
3. Detener el hilo:
En Java, detener un hilo no es simple, no quieres detenerlo como una interrupción, necesitas algunos trucos.
Hay tres formas de detener un hilo:
1. Terminar el hilo normalmente, es decir, el método run() se detiene normalmente al final de la ejecución.
2. Utilice el método de interrupción para interrumpir el hilo.
3. Utilice el método de detención para detener el hilo con fuerza.
Introducción al método de interrupción para interrumpir el hilo:
El método de interrupción en realidad no interrumpe directamente el hilo, sino que solo agrega un indicador de interrupción al hilo.
Determinar si el hilo está detenido:
this.interrupted(); Determinar si el hilo actual está interrumpido. (Determine el hilo correspondiente al código donde se encuentra el método, no el hilo correspondiente al objeto que llama)
this.isInterrupted(); Determina si el hilo está interrumpido. Cuando se llama dos veces seguidas, si la primera vez devuelve verdadero, la segunda vez devolverá falso)
Este último no tiene la función de borrar el estado (devuelve verdadero ambas veces)
Detener realmente los métodos del hilo:
Métodos de excepción:
En el método de ejecución, use this.interrupted() para determinar el estado de terminación del hilo. Estado de terminación del hilo, si es verdadero, lanza una nueva excepción interrumpida () y detecta la excepción para detener el hilo.
Volver para detener el hilo:
En el método de ejecución, use this.interrupted() para determinar el estado de terminación del hilo y, si es verdadero, regresar para detener el hilo. (Se recomienda utilizar el método de excepción para detener el subproceso, porque también es posible lanzar el subproceso en la captura, lo que permite que se propague el evento de detención del subproceso).
Nota: Detener un hilo mientras está inactivo:
Detener un hilo mientras está inactivo informará una excepción y borrará el valor de estado del hilo a falso;
Deténgase primero y luego dormir También se informarán interrupciones anormales del sueño
4.
¡Espero que esto ayude! ~