Tecnología multicanal

1. Breve descripción: un solo núcleo logra concurrencia.

Segundo, concurrencia y paralelismo.

  1. Concurrencia: Parece que la ejecución simultánea se puede llamar concurrencia.

  2. Paralelo: correr simultáneamente en el verdadero sentido.

  3. Resumen: el paralelismo es concurrente: una computadora de un solo núcleo no debe ser capaz de lograr el paralelismo, pero puede ser concurrente.

En tercer lugar, el mecanismo: cada parte del hardware de la computadora cambia para trabajar en el programa simultáneo y guarda el estado actual al cambiar.

Cuarto, el rol: puede ahorrar el tiempo total dedicado a ejecutar múltiples programas.

Cinco, reutilizar

  1. Reutilización espacial: varios programas comparten un conjunto de hardware informático.

  2. Reutilización a tiempo: la duración total de múltiples programas es igual a la más larga.

6. Dos mecanismos para el cambio de CPU

  1. Cuando un programa encuentra una operación de E / S, el sistema operativo privará al programa de la autoridad de ejecución de la CPU, lo que mejora la utilización de la CPU y no afecta la eficiencia de ejecución del programa.

  2. Cuando un programa ocupa la CPU durante mucho tiempo, el sistema operativo también privará al programa de la autoridad de ejecución de la CPU, pero esto reducirá la eficiencia de ejecución del programa.

Siete, procedimientos y procesos.

  1. Programa: el código almacenado en el disco duro está "muerto".

  2. Proceso: indica que el proceso que ejecuta el programa está "en vivo".

8. Mecanismo de programación del proceso

  1. Algoritmo de programación por orden de llegada: bueno para operaciones a largo plazo, pero no para operaciones a corto plazo.

  2. Algoritmo de programación de prioridad de trabajos cortos: es bueno para trabajos de tiempo corto pero no para trabajos de tiempo prolongado.

  3. Método de rotación de segmentos de tiempo + cola de retroalimentación multinivel: después de que se inicia un programa, se asignará primero una cantidad fija de segmentos de tiempo. Si el programa no se completa después de estos segmentos de tiempo, se bajará a la cola con baja prioridad de ejecución Por analogía, cuando se necesita iniciar un nuevo programa, la CPU detendrá inmediatamente la ejecución del programa actual y saltará a la apertura del nuevo programa.

Nueve, los tres estados de operación del programa: estado listo ===> estado de ejecución ===> estado de bloqueo ===> estado listo ===> estado de ejecución.

Diez, síncrono y asíncrono

  1. Sincronización: después de enviar la tarea, no se realizarán otras acciones primero, pero esperar el resultado de la tarea en su lugar, parece una sensación atascada desde el nivel del programa.

  2. Asíncrono: después de enviar la tarea, se realizarán otras acciones de inmediato y, una vez completada, el resultado de la tarea se devolverá automáticamente a través del mecanismo de recuperación.

11. Bloqueo y no bloqueo

  1. Bloqueo: estado de bloqueo.

  2. Sin bloqueo: estado listo, estado de ejecución.

  3. Estado ideal: deje que el código cambie siempre entre el estado preparado y el estado de ejecución.

Doce, asincrónico sin bloqueo: es la combinación más eficiente.

13. Inicie el proceso: crear un proceso es solicitar otro espacio en la memoria para ejecutar el código. Varios procesos corresponden a múltiples espacios de memoria independientes. Por defecto, no hay interacción directa entre los procesos. Con la ayuda de herramientas de terceros, módulos, etc.

# El primer proceso abierto método: 
# creación de un proceso similar al de las importaciones de módulo bajo Windows, por lo que necesita para crear el principal dentro de la ejecución del programa, evitando la repetición crear 
# bajo Linux es una copia directa de 
importación multiprocesamiento
 Importación Tiempo 


DEF Test (Tag , n):
     print ( ' {} comenzó ... ' .format (etiqueta)) 
    time.sleep (n) 
    print ( ' {} finalizó ... ' .format (etiqueta)) 


if  __name__ == ' __main__ ' : 
    star_time = time.time () 
    p1 = multiprocesamiento.Process (target = test, args = ( ' aaa ' , 1)) 
    P2 = multiprocessing.Process (target = la prueba, args = ( ' bbb ' , 2 )) 
    p3 = multiprocessing.Process (target = la prueba, args = ( ' ccc ' , 3))   # crear tres objetos de proceso 
    P1. Inicio () 
    p2.start () 
    p3.start ()   # abiertos tres procesos 
    p1.join () 
    p2.join () 
    p3.join ()   # declaró tres necesidades principales de programa que se sincronizan con el proceso de ejecución 
    hora_final = time.time ( )
     print ( 'Cuando los tres procesos comparten: {} ' .format (end_time- star_time))
     print ( ' Fin del programa principalEl 
resultado de ' )
 ' '' es: 
aaa comenzó ... 
bbb comenzó ... 
ccc comenzó ... 
aaa terminó ... 
bbb terminó ... 
ccc terminó ... Cuando los 
tres procesos comparten: 3.089561939239502 
finaliza el programa principal 
''

 

# El segundo proceso abierto método: la clase de herencia 
de importación multiprocesamiento
 Importación Tiempo 


clase MyProcess (multiprocessing.Process):
     DEF  __init__ (Ser, Tag, el n-): 
        . Super () __init__ () 
        self.tag = Tag 
        self.n = n 

    def run (self):
         print ( ' () inició ... ' .format (self.tag)) 
        time.sleep (self.n) 
        print ( ' () finalizó ... ' .format (self. etiqueta)) 


si  __name__ == ' __main__' : 
    La p = MyProcess ( ' AAA '1 ) 
    p.start () 
    Imprimir ( ' el programa principal para ejecutar ' )   # no aporta declaración, el programa principal no va a esperar a que el niño, sino para inmediatamente poner en práctica sus propios códigos de unirse a 
' '' 
resultados Para: el 
programa principal se ejecuta primero 
aaa comienza ... 
aaa termina ... 
'' '

 

# Aislamiento de datos entre los procesos 
de importación multiprocesamiento
 Importación Tiempo 

main_tag = 1000 DEF Test (input_tag):
     , Ingreso Ltd © main_tag 
    main_tag = input_tag   # declaración global del niño sigue siendo el propio espacio de memoria global niño no afectará a la principal variable global 
    time.sleep (1 )
     print ( ' proceso hijo: {} ' .format (main_tag)) if __name__ == ' __main__ ' : 
    p = multiprocessing.Process (target = test, args = (3333 ,)) 
    p.start () print ( ' Programa principal: {} '





 
    .format (main_tag))
 '' ' 
Resultado: 
programa principal: 1000 
procesos secundarios: 3333 
' ''

 

14. Historial de desarrollo del desarrollo del sistema operativo: Jige Portal: https://www.cnblogs.com/Dominic-Ji/articles/10929381.html

 

Supongo que te gusta

Origin www.cnblogs.com/caoyu080202201/p/12758141.html
Recomendado
Clasificación