Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cuál es la diferencia entre procesos y subprocesos en Python?

¿Cuál es la diferencia entre procesos y subprocesos en Python?

Num01–gt; Thread

Un hilo es la unidad más pequeña del sistema operativo que puede realizar la programación de operaciones. Está incluido en el proceso y es la unidad operativa real en el proceso.

Un hilo se refiere a un único flujo secuencial de control en un proceso.

Un proceso puede tener varios subprocesos al mismo tiempo y cada subproceso puede realizar diferentes tareas en paralelo.

Num02–gt; Proceso

Un proceso es un proceso de ejecución dinámica de un programa sobre un conjunto de datos.

El proceso consta de las siguientes tres partes:

1. Programa: El programa que escribimos se utiliza para describir qué funciones quiere completar el proceso y cómo completarlo.

2. Conjunto de datos: el conjunto de datos son los recursos que necesita el programa durante la ejecución, como imágenes, audio y video, archivos, etc.

3. Bloque de control de proceso: el bloque de control de proceso se utiliza para registrar las características externas del proceso y describir el proceso de cambio de ejecución del proceso. Es la única forma que tiene el sistema de percibir la existencia del proceso.

Num03–gt; La diferencia entre procesos y subprocesos:

1. Diferentes métodos de ejecución:

Un proceso no se puede ejecutar solo, es solo una colección. de recursos.

Para operar la CPU, un proceso primero debe crear un hilo.

Todos los hilos de un mismo proceso comparten el espacio de memoria que ocupa el mismo proceso.

2. Relación

El primer hilo en el proceso es el hilo principal. El hilo principal puede crear otros hilos; otros hilos también pueden crear hilos.

Un proceso tiene un proceso padre y un proceso hijo, espacio de memoria independiente y un identificador único: pid.

3. Velocidad

Iniciar un hilo es más rápido que iniciar un proceso.

La velocidad de ejecución de subprocesos y procesos de ejecución es la misma, no hay comparación.

Los subprocesos comparten espacio de memoria y la memoria del proceso es independiente.

4. Crear

El proceso padre genera un proceso hijo, lo que equivale a copiar un espacio de memoria. No hay acceso directo entre procesos. un nuevo hilo es muy simple. Crear un nuevo proceso requiere una copia del proceso principal.

Un subproceso puede controlar y operar otros subprocesos en el mismo nivel, pero un proceso solo puede operar procesos secundarios.

5. Interacción

Los hilos del mismo proceso pueden acceder directamente entre sí.

Dos procesos deben comunicarse a través de un proxy intermedio.

Recomendaciones relacionadas: "Videotutorial de Python"

Num04–gt; Varios conceptos comunes

1.

Concurrencia: Desde una perspectiva micro, las CPU se ejecutan por turnos, y desde una perspectiva macro, los usuarios ven la ejecución simultánea. Porque la CPU cambia de tarea muy rápidamente.

Paralelo: se refiere a la capacidad del sistema para procesar verdaderamente múltiples tareas (acciones) al mismo tiempo.

2. ¿Cuál es la diferencia entre sincrónico, asincrónico y de sondeo?

Tarea de sincronización: B ha estado esperando a A. Una vez que A completa, B ejecuta la tarea. (Caso de llamada)

Tarea de sondeo: B no espera a A todo el tiempo. B le preguntará a A después de un tiempo y le preguntará a A después de un tiempo

Tarea asincrónica: B lo hace. No es necesario seguir esperando a que A, B haga otras cosas primero y A notifique a B después de que A complete. (Enviando caso SMS)

Num05–gt; Comparación de ventajas y desventajas de procesos y subprocesos

En primer lugar, para lograr la multitarea, solemos diseñar el Master-Worker. modelo, y el Maestro es responsable de asignar tareas, el Trabajador es responsable de ejecutar las tareas. Por lo tanto, en un entorno multitarea, generalmente hay un Maestro y varios Trabajadores.

Si se utilizan varios procesos para implementar Master-Worker, el proceso principal es Master y los demás procesos son Workers.

Si se utilizan subprocesos múltiples para implementar Master-Worker, el subproceso principal es Master y los demás subprocesos son Workers.

La mayor ventaja del modo multiproceso es su alta estabilidad, porque si un subproceso falla, no afectará al proceso principal ni a otros subprocesos. (Por supuesto, si el proceso maestro cuelga, todos los procesos colgarán, pero el proceso maestro solo es responsable de asignar tareas y la probabilidad de colgar es baja). El famoso Apache adoptó por primera vez el modo multiproceso.

La desventaja del modo multiproceso es que el costo de crear un proceso es alto. En sistemas Unix/Linux, llamar a fork está bien, pero crear procesos en Windows es costoso. Además, la cantidad de procesos que el sistema operativo puede ejecutar al mismo tiempo también es limitada. Bajo las limitaciones de memoria y CPU, si hay miles de procesos ejecutándose al mismo tiempo, el sistema operativo incluso tendrá problemas de programación.

El modo multiproceso suele ser un poco más rápido que el multiproceso, pero no mucho más rápido. Además, la desventaja fatal del modo multiproceso es que la muerte de cualquier subproceso puede provocar directamente que todo el proceso falle. falla, porque todos los hilos comparten la memoria del proceso. En Windows, si hay un problema con el código ejecutado por un subproceso, a menudo puede ver este mensaje: "El programa ha realizado una operación ilegal y se cerrará pronto. De hecho, a menudo hay un problema con un determinado subproceso". , pero el sistema operativo obligará a finalizar todo el proceso.

En Windows, los subprocesos múltiples son más eficientes que los procesos múltiples, por lo que el servidor IIS de Microsoft adopta el modo de subprocesos múltiples de forma predeterminada. Debido a problemas de estabilidad con subprocesos múltiples, IIS no es tan estable como Apache. Para aliviar este problema, IIS y Apache ahora tienen modos mixtos de multiproceso y multiproceso, lo que realmente complica cada vez más el problema.

Num06–gt; Tareas intensivas en informática y tareas intensivas en IO

La segunda consideración a la hora de utilizar la multitarea es el tipo de tarea. Podemos dividir las tareas en informáticas intensivas e intensivas en IO.

El primer tipo: las tareas informáticas intensivas se caracterizan por una gran cantidad de cálculos y consumo de recursos de CPU, como el cálculo de pi, la decodificación de vídeos de alta definición, etc., todo ello dependiendo de la potencia informática. de la CPU. Aunque este tipo de tarea informática intensiva también se puede completar con multitarea, cuantas más tareas hay, más tiempo se dedica al cambio de tareas y menor es la eficiencia de la CPU en la ejecución de tareas, por lo que es más eficiente. uso de la CPU, tareas informáticas intensivas El número de tareas simultáneas debe ser igual al número de núcleos de CPU.

Las tareas informáticas intensivas consumen principalmente recursos de la CPU, por lo que la eficiencia en la ejecución del código es crucial. Los lenguajes de scripting como Python se ejecutan de manera muy ineficiente y son completamente inadecuados para tareas computacionales intensivas. Para tareas computacionalmente intensivas, es mejor escribir en lenguaje C.

Segundo tipo: el tipo de tarea es intensiva en IO. Las tareas que involucran IO de red y disco son todas tareas intensivas en IO. La característica de este tipo de tarea es que el consumo de CPU es muy pequeño y la mayoría. del tiempo de la tarea Todos están esperando a que se complete la operación de IO (porque la velocidad de IO es mucho menor que la velocidad de la CPU y la memoria). Para tareas intensivas de IO, cuantas más tareas, mayor será la eficiencia de la CPU, pero hay un límite. Las tareas más comunes son tareas intensivas en IO, como aplicaciones web.

Durante la ejecución de tareas intensivas de IO, el 99% del tiempo se dedica a IO y muy poco tiempo a la CPU. Por lo tanto, utilice el lenguaje C extremadamente rápido para reemplazar la velocidad de ejecución extremadamente lenta. de Python. El lenguaje de secuencias de comandos no puede mejorar la eficiencia operativa en absoluto. Para tareas intensivas en IO, el lenguaje más adecuado es el lenguaje con la mayor eficiencia de desarrollo (el lenguaje de secuencias de comandos con la menor cantidad de código es la primera opción y el lenguaje C es el peor).

Recomendaciones relacionadas:

Qué es un proceso en Python