Conocimiento alternativo de hilos y procesos.

Artículo de referencia:
explicación popular de la diferencia entre hilo y proceso:
https://www.jianshu.com/p/8ad441510860
https://baijiahao.baidu.com/s?id=1611925141861592999&wfr=spider&for=pc
https://www .cnblogs.com/zhehan54/p/6130030.html
https://zhuanlan.zhihu.com/p/60375108
https://blog.csdn.net/qinian8/article/details/100779193

Siete métodos de comunicación entre procesos:
https://www.cnblogs.com/xdyixia/p/9257668.html

1. La diferencia básica entre proceso y subproceso:

1. Un proceso es la unidad más pequeña de asignación de recursos, y un subproceso es la unidad más pequeña de ejecución de programa (la unidad más pequeña de programación de recursos). 2. Un proceso tiene
su propio espacio de direcciones independiente. Cada vez que se inicia un proceso, el el sistema le asignará espacio de direcciones y creará tablas de datos para mantener el segmento de código, el segmento de pila y el segmento de datos, esta operación es muy costosa.
Los subprocesos comparten los datos en el proceso y usan el mismo espacio de direcciones, por lo que el costo de cambiar un subproceso por la CPU es mucho menor que el de un proceso, y el costo de crear un subproceso también es mucho menor que el de un proceso.
3. La comunicación entre hilos es más conveniente, los hilos bajo un mismo proceso comparten datos tales como variables globales y variables estáticas, y la comunicación entre procesos necesita llevarse a cabo por medio de comunicación (IPC). Sin embargo, cómo manejar la sincronización y la exclusión mutua es la dificultad de escribir programas de subprocesos múltiples.
4. Sin embargo, los programas multiproceso son más robustos. Mientras un subproceso de un programa multiproceso muera, todo el proceso también morirá, y la muerte de un proceso no afectará al otro proceso, porque el proceso tiene su propia espacio de direcciones independiente.
Referencia: https://www.cnblogs.com/zhehan54/p/6130030.html

2. Hilos y procesos:

https://www.cnblogs.com/Jones-dd/p/8858995.htmlProceso
: se refiere a una aplicación que se ejecuta en el sistema; una vez que se ejecuta un programa, es un proceso; o más profesionalmente: un proceso se refiere a ejecución de programa Una instancia en la que un programa se ejecuta en la medida en que es una colección de estructuras de datos. Desde el punto de vista del kernel, el propósito de un proceso es servir como unidad básica para asignar recursos del sistema (tiempo de CPU, memoria, etc.).
Subproceso: la unidad básica a la que el sistema asigna recursos de tiempo del procesador, o un flujo de ejecución de unidad que se ejecuta de forma independiente dentro de un proceso. Proceso: la unidad más pequeña de asignación de recursos, subproceso: la unidad más pequeña de ejecución del programa.

La diferencia entre procesos de subprocesos se refleja en 4 aspectos: (avanzado)

1. Debido a que el proceso tiene un espacio de pila y un segmento de datos independientes, cada vez que se inicia un nuevo proceso, se le debe asignar un espacio de direcciones independiente y se establecen numerosas tablas de datos para mantener su segmento de código, segmento de pila y segmento de datos. "lujo" para múltiples procesos, y la sobrecarga del sistema es relativamente grande, pero los subprocesos son diferentes. Los subprocesos tienen espacio de pila independiente, pero comparten segmentos de datos. Usan el mismo espacio de direcciones entre sí y comparten la mayoría de los datos, que es más económico que los procesos., la sobrecarga es relativamente pequeña, la velocidad de conmutación es más rápida que el proceso, y la eficiencia es alta. Sin embargo, debido a las características independientes de los procesos, la seguridad del proceso es relativamente alta, y debido a que el proceso tiene un espacio de direcciones independiente Después de que un proceso falla, en el modo protegido No hay impacto en otros procesos, y los subprocesos son solo rutas de ejecución diferentes dentro de un proceso. Cuando un hilo muere, todo el proceso muere.
2. Se refleja en el mecanismo de comunicación.Debido a que los procesos no interfieren entre sí y son independientes entre sí, el mecanismo de comunicación del proceso es relativamente complicado, como canalizaciones, señales, colas de mensajes, memoria compartida, sockets y otros mecanismos de comunicación El mecanismo de comunicación de subprocesos es muy conveniente debido al segmento de datos compartido.
3. Reflejados en el sistema de la CPU, los subprocesos hacen que el sistema de la CPU sea más efectivo, porque el sistema operativo se asegurará de que cuando la cantidad de subprocesos no sea mayor que la cantidad de CPU, diferentes subprocesos se ejecutan en diferentes CPU.
4. Reflejado en la estructura del programa, aquí hay un ejemplo simple y fácil de entender: cuando usamos procesos, involuntariamente usamos if else nesting para juzgar el pid, lo que hace que la estructura del programa sea engorrosa, pero cuando usamos hilos, básicamente Puede deshacerse de él Por supuesto, la unidad de función de ejecución interna del programa aún necesita ser utilizada, por lo que el hilo es de gran ayuda para mejorar la estructura del programa.

Cuándo usar proceso o subproceso:

1. Los subprocesos deben crearse y destruirse con frecuencia porque el costo de crear y destruir un proceso es muy alto para un proceso 2. La
velocidad de cambio de subprocesos es rápida, por lo que cuando se requiere una gran cantidad de cálculos y cambios frecuentes El uso de subprocesos para operaciones puede mejorar la respuesta de la aplicación
3. Dado que el uso de subprocesos es más dominante en la eficiencia del sistema de CPU, se puede desarrollar para usar procesos para múltiples -distribución de máquinas. Los subprocesos se utilizan para la distribución multinúcleo. 4. Los subprocesos se utilizan para
operaciones paralelas, como El subproceso concurrente del lado del servidor de la arquitectura C/S responde a las solicitudes de los usuarios.
5. Cuando se requiere más estabilidad y seguridad. , es adecuado elegir un proceso; cuando se necesita velocidad, es mejor elegir un subproceso
porque mi proyecto necesita compartir los datos del segmento de datos, que pueden ser utilizados por múltiples El programa se modifica, por lo que se usan subprocesos para completar esta operación no necesita agregar mecanismos de comunicación complejos. El proceso necesita agregar mecanismos de comunicación complejos para compartir segmentos de datos, lo que aumenta la incomodidad de mi código, y el uso de subprocesos tiene una pequeña sobrecarga y el proyecto se ejecuta rápidamente. Rápido y eficiente .
Si solo usa el proceso, aunque la seguridad es alta, la simplicidad del código no es buena, la estructura del programa es engorrosa, la sobrecarga es relativamente grande y es necesario agregar un mecanismo de comunicación complejo, lo que aumentará en gran medida la cantidad de código en mi proyecto, y la velocidad de conmutación aumentará.Es muy lento, y la eficiencia de ejecución se reduce mucho. . .

La relación entre procesos e hilos:

1. Un subproceso solo puede pertenecer a un proceso y un proceso puede tener varios subprocesos, pero al menos un subproceso. Un subproceso es la unidad de programación y ejecución más pequeña reconocida por el sistema operativo.
2. Los recursos se asignan a los procesos y todos los subprocesos del mismo proceso comparten todos los recursos del proceso. Múltiples subprocesos en el mismo proceso comparten segmento de código (código y constantes), segmento de datos (variables globales y estáticas), segmento extendido (almacenamiento en montón). Pero cada subproceso tiene su propio segmento de pila, que también se denomina tiempo de ejecución, y se utiliza para almacenar todas las variables locales y variables temporales.
3. El procesador se asigna al subproceso, es decir, el subproceso se ejecuta realmente en el procesador.
4. Los subprocesos deben cooperar y sincronizarse durante la ejecución. Los subprocesos de diferentes procesos necesitan utilizar la comunicación de mensajes para lograr la sincronización.

3. Multiproceso

** ¿Dónde se usa generalmente subprocesos múltiples? **

1. Los subprocesos múltiples de Java generalmente se usan en lugares con alta concurrencia, como la modificación del estado del pedido, que se puede modificar a través de subprocesos múltiples y ejecución de tiempo fijo, y los subprocesos múltiples se usan generalmente en el pago.

2. El ejemplo más típico es: el
registro de usuario se completa para enviar un gran paquete de regalo/puntos, y los puntos, etc., son otro sistema y consumen mucho tiempo, y tales tareas no son particularmente importantes incluso si fallan.
Subproceso de fondo: por ejemplo, realice periódicamente algunas tareas especiales, como la actualización periódica de los archivos de configuración, la programación de tareas (como cuarzo) y algún control para la recopilación periódica de información, etc.
3. La aplicación más típica, como tomcat, usa multihilo internamente, cientos de clientes acceden a la misma aplicación web, el hilo finalmente llama a nuestro programa servlet, como el método doGet o doPost.

Si no se utiliza el mecanismo de subprocesos múltiples, cuando cientos de personas acceden a una aplicación web al mismo tiempo, Tomcat tendrá que hacer cola y procesarla en serie, por lo que el cliente no puede soportar ese tipo de velocidad de acceso.
Además, cuando se requiere procesamiento asíncrono, se requiere subprocesamiento múltiple. Por ejemplo, la tarea A y la tarea B deben procesarse en paralelo, y un solo subproceso solo puede procesarse en serie. La tarea A se completa primero y luego la tarea B se completa. Si desea ejecutar varias tareas al mismo tiempo, debe asignar un subproceso a cada tarea y luego ejecutar varias tareas al mismo tiempo a través de la programación de subprocesos de la máquina virtual Java. Por ejemplo, si su CPU es de varios núcleos, puede permitir que una CPU ejecute un subproceso. Si solo hay una CPU, la capa inferior se basa en el principio de multiplexación por división de tiempo, y cada subproceso obtiene los recursos de la CPU de acuerdo con los intervalos de tiempo.
4. Para operaciones particularmente lentas, como la copia de seguridad de la base de datos, puede abrir un subproceso para realizar la copia de seguridad y luego devolver la ejecución. La recepción preguntará continuamente al fondo sobre el estado de ejecución del subproceso. 5. Una
empresa la lógica tiene muchos ciclos y no hay impacto entre cada ciclo, por ejemplo, para verificar la existencia de 10,000 rutas de URL, en circunstancias normales, es necesario repetir 10,000 veces para verificar cada URL una por una, lo que será muy ineficiente Suponiendo que se tarda 1 minuto en verificar uno, tardará 10.000 minutos en total, lo que da un poco de miedo. En este momento, los subprocesos múltiples se pueden usar para dividir 10 000 URL en 50 partes iguales, abrir 50 subprocesos y cada subproceso solo necesita verificar 200 URL, de modo que todos los subprocesos se ejecuten en mucho menos de 10 000 minutos.
6. Necesita saber el progreso de ejecución de una tarea, como la barra de progreso que vemos a menudo, el método de implementación puede ser agregar una variable de atributo de número entero a la tarea (para que se puedan compartir diferentes métodos) y agregar 1 a la valor de la variable cuando la tarea se ejecuta hasta cierto punto, se abre otro hilo para acceder continuamente a esta variable de acuerdo con el intervalo de tiempo y retroalimentación al usuario.
En resumen, el uso de subprocesos múltiples es para aprovechar al máximo los recursos de la CPU y mejorar la eficiencia de ejecución del programa. Cuando encuentre que la eficiencia de ejecución de una lógica de negocios es particularmente baja y lleva mucho tiempo, puede considerar usar subprocesos múltiples. Sin embargo, el tiempo y el orden de qué subproceso ejecuta la CPU es incierto, incluso si se establece la prioridad del subproceso, por lo que el uso de subprocesos múltiples

Ventajas de multiproceso:

1. El uso de subprocesos puede poner las tareas del programa que tardan mucho tiempo en segundo plano para su procesamiento
2. La interfaz de usuario puede ser más atractiva, de modo que, por ejemplo, cuando el usuario hace clic en un botón para activar el procesamiento de ciertos eventos, puede aparecer una barra de progreso para mostrar el progreso del procesamiento
3. La velocidad de ejecución del programa puede acelerarse
4. Los subprocesos son más útiles en la realización de algunas tareas de espera, como la entrada del usuario, la lectura y escritura de archivos y el envío de red y recibir datos. En este caso, se pueden liberar algunos recursos valiosos, como el uso de memoria, etc.
5. Múltiples subprocesos se ejecutan alternativamente, reduciendo o evitando la respuesta lenta causada por el bloqueo del programa o situaciones inesperadas, y reduciendo la probabilidad de que los usuarios esperen.

Desventajas de multihilo:

1. Si hay una gran cantidad de subprocesos, afectará el rendimiento porque el sistema operativo necesita cambiar entre ellos.
2. Más subprocesos requieren más espacio de memoria.
3. Los subprocesos múltiples pueden traer más "errores" al programa, así que úselo con cuidado
4. La suspensión de subprocesos debe tener en cuenta su impacto en el funcionamiento del programa.
5. Por lo general, los datos del modelo de bloques se comparten entre varios subprocesos, y es necesario para evitar que se produzca un interbloqueo de subprocesos.

Ejemplo:
abrir QQ, abrir un proceso; abrir Thunder, abrir un proceso. En este proceso de QQ, se abre un subproceso para la transmisión de texto, un subproceso para la transmisión de voz y otro subproceso para los cuadros de diálogo emergentes. Entonces, ejecutar un determinado software es equivalente a abrir un proceso. Durante el proceso de ejecución de este software (en este proceso), se admiten varios trabajos para completar la operación de QQ, por lo que cada uno de estos "múltiples trabajos" tiene un subproceso. Entonces, un proceso administra múltiples hilos.

Supongo que te gusta

Origin blog.csdn.net/weixin_44313315/article/details/105794408
Recomendado
Clasificación