La diferencia entre Python multiproceso y multiproceso
En el capítulo anterior, acabamos de presentar la programación de redes de sockets y servidores de sockets.
Hay esta frase en el código del servidor socketserver:
server = socketserver.ThreadingTCPServer((ip, port), MyServer)
La clase ThreadingTCPServer es una Un servidor de socket que admite subprocesos múltiples y el protocolo TCP, su relación de herencia es la siguiente:
clase ThreadingTCPServer(ThreadingMixIn, TCPServer): pasar
El servidor TCP de la derecha es en realidad el principal clase principal funcional, y ThreadingMixIn a la izquierda es una clase que implementa subprocesos múltiples, y ThreadingTCPServer en sí no tiene ningún código.
MixIn es muy común en la denominación de clases de Python. Se llama "mezclar" y en broma generalmente lo heredan las subclases para algunas funciones importantes.
Echemos un vistazo al código fuente de ThreadingMixIn:
clase ThreadingMixIn:
daemon_threads = False
def process_request_thread(self, solicitud, dirección_cliente):
pruebe:
self.finish_request(solicitud, dirección_cliente)
self.shutdown_request(solicitud)
excepto :
self.handle_error(solicitud, dirección_cliente)
self.shutdown_request(solicitud)
def proceso_request(self, solicitud, dirección_cliente):
t = threading.Thread(target = self.process_request_thread,
args = (solicitud, dirección_cliente))
t.daemon = self.daemon_threads
t .start()
En la clase ThreadingMixIn, en realidad se definen un atributo y dos métodos. El método Process_request () en realidad llama al módulo de subprocesos múltiples integrado de Python. Este módulo es la base de todos los subprocesos múltiples en Python, y socketserver esencialmente utiliza este módulo.
Socketserver implementa capacidades de procesamiento de tareas multiproceso a través del módulo de subprocesos y puede proporcionar servicios a varios clientes al mismo tiempo.
Entonces, ¿qué es un hilo y qué es un proceso?
Un proceso es una instancia de ejecución de un programa (software, aplicación). Cada programa en ejecución puede crear múltiples procesos al mismo tiempo, pero debe haber al menos uno. Cada proceso proporciona todos los recursos necesarios para ejecutar el programa. Tiene un espacio de direcciones virtuales, código ejecutable, interfaz del sistema operativo, contexto de seguridad (que registra el usuario y los permisos que iniciaron el proceso, etc.) y una identificación de proceso única. variables de entorno, clases de prioridad, espacio de trabajo mínimo y máximo (espacio de memoria).
Los procesos pueden contener subprocesos y cada proceso debe tener al menos un subproceso. Cuando se inicia cada proceso, primero generará un hilo, el hilo principal, y luego el hilo principal creará otros hilos secundarios.
Un subproceso, a veces llamado proceso ligero (LWP), es la unidad más pequeña de flujo de ejecución de un programa. Un hilo estándar consta de un ID de hilo, un puntero de instrucción actual (PC), un conjunto de registros y una pila. Además, un subproceso es una entidad en el proceso y es la unidad básica que el sistema programa y distribuye de forma independiente. El subproceso en sí no posee de forma independiente los recursos del sistema, pero puede compartir todos los recursos que posee el proceso con otros subprocesos. pertenecientes al mismo proceso. Cada aplicación tiene al menos un proceso y un hilo. Ejecutar varios subprocesos simultáneamente en un solo programa para completar diferentes tareas que se dividen en partes se denomina subprocesos múltiples.
Por ejemplo, una empresa quiere producir un producto, por lo que construye muchas fábricas en su base de producción, y cada fábrica tiene múltiples líneas de producción. Todas las fábricas cooperan para producir el producto completo. La línea de montaje de una sola fábrica es responsable de producir los componentes del producto de la fábrica a la que pertenece. Cada fábrica tiene su propia biblioteca de materiales, y las líneas de producción de la fábrica comparten estos materiales. Para lograr la producción, una empresa debe tener al menos una fábrica y una línea de producción. Pasando al concepto de computadora, entonces la empresa es la aplicación, la fábrica es el proceso de la aplicación y la línea de producción es el hilo de un determinado proceso.
Características de los subprocesos:
Un subproceso es un contexto de ejecución, que es una serie de instrucciones necesarias para que una CPU las ejecute. Digamos que estás leyendo un libro, no lo has terminado y quieres tomar un descanso, pero quieres continuar donde estabas cuando regresaste. Una forma es escribir los tres valores de número de páginas, número de líneas y número de palabras. Estos valores son el contexto de ejecución. Si tu compañero de cuarto está leyendo este libro mientras tú tomas un descanso, utiliza el mismo método. Tú y ella sólo necesitan escribir estos tres números y podrán leer el libro juntos en momentos alternos.
Los hilos funcionan de manera similar. La CPU le dará la ilusión de que puede realizar múltiples operaciones al mismo tiempo. De hecho, solo dedica una cantidad muy pequeña de tiempo a cada operación. En esencia, la CPU solo puede hacer una cosa al mismo tiempo. -Llamado procesamiento concurrente y de subprocesos múltiples. Solo una ilusión. La CPU puede hacer esto porque tiene un contexto de ejecución para cada tarea, del mismo modo que puedes compartir el mismo libro con tus amigos.
La diferencia entre procesos y subprocesos:
Los subprocesos en un mismo proceso comparten el mismo espacio de memoria, pero los espacios de memoria entre procesos son independientes.
Los datos de todos los hilos del mismo proceso se comparten, pero los datos entre procesos son independientes.
Las modificaciones al hilo principal pueden afectar el comportamiento de otros hilos, pero las modificaciones al proceso padre (aparte de la eliminación) no afectarán a otros procesos secundarios.
Un hilo es una instrucción de ejecución contextual, mientras que un proceso es un conjunto de recursos relacionados con operaciones.
Los hilos de un mismo proceso pueden comunicarse directamente, pero la comunicación entre procesos requiere la ayuda de un agente intermedio.
Crear un nuevo hilo es fácil, pero crear un nuevo proceso requiere una copia del proceso principal.
Un hilo puede operar otros hilos del mismo proceso, pero un proceso sólo puede operar sus procesos hijos.
La velocidad de inicio del subproceso es rápida y la velocidad de inicio del proceso es lenta (pero la velocidad de ejecución de los dos no es comparable).
A medida que las CPU modernas han entrado en la era de múltiples núcleos y la frecuencia principal ha mejorado enormemente en comparación con el pasado, la programación multiproceso y multiproceso se ha convertido en algo común. Python es totalmente compatible con la programación multiproceso y multiproceso, y también admite corrutinas.