La diferencia fundamental es : los programas de subprocesos múltiples no están bloqueados, sino concurrentes.
El programa ordinario se lleva a cabo de acuerdo con el proceso tradicional, si encuentra while (verdadero) en el medio, entonces el programa siempre estará en este bucle sin fin y nunca se apagará. El programa multiproceso no lo hace, es concurrente. En la próxima porción de tiempo de la CPU, el programa multiproceso ejecutará lo suyo, independientemente del bucle infinito que tenga aquí.
Tome el código como ejemplo:
1. Utilice funciones ordinarias para ejecutar el programa.
import threading
import time
def tt1():
while 1:
print('hello')
time.sleep(0.1)
def tt2():
print('hello world')
if __name__ == '__main__':
# t1 = threading.Thread(target=tt1).start()
tt1()
tt2()
pass
Imprimir resultado:
Ejecute el programa, el programa creará un proceso con un hilo principal, y el hilo principal ejecutará la función tt1 (). Debido al uso de un bucle infinito, siempre estará bloqueado y el programa no podrá continuar. ejecutar hacia abajo.
2. Utilice subprocesos para ejecutar programas:
import threading
import time
def tt1():
while 1:
print('hello')
time.sleep(0.1)
def tt2():
print('hello world')
if __name__ == '__main__':
t1 = threading.Thread(target=tt1).start()
# tt1()
tt2()
pass
Resultado de la ejecución:
se imprime 'hola mundo', lo que indica que el programa principal no está bloqueado, pero espera a que la CPU esté inactiva, vuelve al hilo principal y continúa ejecutando el programa. Imprimiendo 'hola mundo'
Descripción: La el programa creará un proceso, proceso Tiene un subproceso principal, el subproceso principal ejecutará el programa, después de la ejecución, el programa crea un subproceso t1, la CPU cambiará a la función tt1 () para su ejecución, hasta que la CPU vuelve al programa principal y ejecuta la función tt2 (), imprimiendo hola mundo ((el cambio de CPU se debe al bloqueo de Python GIL)
Resumen :
1. Generalmente, si desea utilizar múltiples funciones en un programa, es mejor iniciar el programa con un hilo
. Cada función usa un hilo . 2. El programa de inicio de la función no continuará ejecutándose cuando ocurre un bucle infinito. , provocando que el programa se bloquee., Y la ejecución del subproceso del programa no hará que el programa principal se bloquee, logrando así el efecto de concurrencia, y la ejecución se destruirá automáticamente al final de la ejecución, y no ocupará demasiado mucha memoria.