Describa brevemente las diferencias y escenarios de aplicación de procesos, subprocesos y corrutinas.

Describa brevemente las diferencias y escenarios de aplicación de procesos, subprocesos y corrutinas.

1. Concepto:

1. Proceso

  • Proceso: un programa o código en ejecución es un proceso, y un código que no se está ejecutando se denomina programa. El proceso es la unidad más pequeña para la asignación de recursos en el sistema. El proceso tiene su propio espacio de memoria, por lo que los datos no se comparten entre procesos y la sobrecarga es alta.
  • Un proceso es un programa con ciertas funciones independientes sobre una actividad en ejecución en un determinado conjunto de datos, y un proceso es una unidad independiente para que el sistema asigne y programe recursos. Cada proceso tiene su propio espacio de memoria independiente y diferentes procesos se comunican a través de la comunicación entre procesos. Dado que los procesos son relativamente pesados ​​y ocupan memoria independiente, la sobrecarga de conmutación (pila, registro, memoria virtual, identificador de archivos, etc.) entre procesos contextuales es relativamente grande, pero relativamente estable y segura.
  • El proceso tiene su propio montón y pila independientes. El montón y la pila no se comparten. El proceso lo programa el sistema operativo.

2. Hilo

  • Subproceso: la unidad más pequeña de ejecución de programación, también llamada ruta de ejecución, no puede existir de forma independiente, sino que depende de la existencia del proceso. Un proceso tiene al menos un subproceso, llamado subproceso principal, y varios subprocesos comparten memoria (intercambio de datos y variables globales), por lo que se mejora la eficiencia operativa del Programa.
  • Un subproceso es una entidad de un proceso y es la unidad básica de programación y despacho de la CPU. Es una unidad básica que es más pequeña que un proceso y puede ejecutarse de forma independiente. El subproceso en sí básicamente no posee recursos del sistema, solo unos pocos recursos que son esenciales durante la operación (como un contador de programa, un conjunto de registros y una pila), pero puede compartir todos los recursos que posee el proceso con otros subprocesos que pertenecen al mismo proceso. La comunicación entre subprocesos se realiza principalmente a través de memoria compartida, el cambio de contexto es rápido y la sobrecarga de recursos es menor, pero en comparación con procesos que no son lo suficientemente estables y pueden perder datos fácilmente.
  • Los subprocesos tienen sus propias pilas independientes, pero el montón se comparte y el sistema operativo programa los subprocesos estándar.

3. Corrutina

  • Corrutinas: subprocesos livianos en modo de usuario, con programación controlada por el usuario y su propio contexto y pila de registro. Básicamente, no hay sobrecarga de cambio de kernel para el cambio y el cambio es flexible.
  • La corrutina es un subproceso liviano en modo de usuario y la programación de la corrutina está completamente controlada por el usuario. Una corrutina tiene su propio contexto de registro y pila. Cuando se cambia el cronograma de rutina, el contexto de registro y la pila se guardan en otros lugares. Al volver a cambiar, se restauran el contexto de registro y la pila previamente guardados. Operar directamente la pila básicamente no tiene sobrecarga de cambio de kernel y se puede acceder a las variables globales. sin bloquear. , por lo que el cambio de contexto es muy rápido.
  • Las corrutinas comparten el montón pero no la pila. El programador programa explícitamente las corrutinas en el bloque de código de la corrutina.

2. Diferencia:

1. Comparado con muchos procesos e hilos.

Un hilo se refiere a una unidad de ejecución dentro de un proceso y también es una entidad programable dentro del proceso. La diferencia entre hilo y proceso:

  1. Espacio de direcciones: un subproceso es una unidad de ejecución dentro de un proceso. Hay al menos un subproceso en un proceso. Comparten el espacio de direcciones del proceso y el proceso tiene su propio espacio de direcciones independiente.
  2. Propiedad de los recursos: el proceso es la unidad de asignación y propiedad de los recursos. Los subprocesos del mismo proceso comparten los recursos del proceso.
  3. Los subprocesos son la unidad básica de programación del procesador, pero los procesos son la unidad básica de asignación de recursos.
  4. Ambos se pueden ejecutar simultáneamente.
  5. Cada subproceso independiente tiene un punto de entrada para la ejecución del programa, una secuencia de ejecución secuencial y una salida del programa. Sin embargo, los subprocesos no se pueden ejecutar de forma independiente y deben depender del programa de aplicación. El programa de aplicación proporciona control de ejecución de múltiples subprocesos.

2. Comparación de corrutinas con subprocesos

  1. Un subproceso puede tener múltiples corrutinas y un proceso también puede tener múltiples corrutinas de forma independiente, de modo que se pueden usar CPU de múltiples núcleos en Python.
  2. Los procesos de subprocesos son todos mecanismos sincrónicos, mientras que las corrutinas son asincrónicas.
  3. La corrutina puede retener el estado de la última llamada, cada vez que el proceso vuelve a ingresar equivale a ingresar al estado de la última llamada.

3. El uso de procesos, subprocesos y corrutinas en Python.

1. El multiprocesamiento generalmente utiliza bibliotecas de multiprocesamiento para aprovechar las CPU de múltiples núcleos. Se utiliza principalmente en programas con uso intensivo de CPU. Por supuesto, también se pueden utilizar productores y consumidores. La ventaja del multiproceso es que la falla de un subproceso no afectará el funcionamiento de otros subprocesos ni del proceso principal, pero la desventaja es que no se pueden iniciar demasiados procesos a la vez, lo que afectará seriamente la programación de recursos del sistema, especialmente el uso y la carga de la CPU.

2. El subproceso múltiple generalmente utiliza la biblioteca de subprocesos para completar algunas operaciones concurrentes intensivas en IO. Las ventajas de los subprocesos múltiples son el cambio rápido y el bajo consumo de recursos, pero si un subproceso se cuelga, todos los subprocesos se verán afectados, por lo que no es lo suficientemente estable.

3. Las corrutinas generalmente usan la biblioteca gevent, por supuesto, esta biblioteca es más problemática de usar, por lo que no se usa mucho. Por el contrario, las corrutinas se usan mucho más en tornado. El uso de corrutinas permite que tornado sea de un solo subproceso y asincrónico. Se dice que también puede resolver el problema C10K. Por lo tanto, las corrutinas se utilizan con mayor frecuencia en aplicaciones web.

Nota: Los tipos con uso intensivo de IO generalmente usan subprocesos múltiples o procesos múltiples, los tipos con uso intensivo de CPU generalmente usan procesos múltiples y los que enfatizan la concurrencia asincrónica sin bloqueo generalmente usan corrutinas. Por supuesto, a veces también es necesario combinar múltiples -Procesar grupos de subprocesos u otras combinaciones.

Supongo que te gusta

Origin blog.csdn.net/weixin_53909748/article/details/132202035
Recomendado
Clasificación