Programação simultânea em Python

Conhecimento requerido

  • O computador também é chamado de computador, ou seja, o cérebro com eletricidade.O computador foi inventado para permitir que ele trabalhe como um ser humano depois de ser ligado, e é mais eficiente que o ser humano porque pode ser ininterrupto por 24 horas.

  • Os cinco principais componentes de um computador

    Controlador

    Operador

    Memória

    Dispositivo de entrada

    Dispositivo de saída

    O núcleo do computador realmente funciona é a CPU (controlador + unidade aritmética = unidade central de processamento)

  • Para que um programa seja executado por um computador, seu código deve ser lido do disco rígido para a memória e, em seguida, a CPU busca instruções antes de executar

Histórico do sistema operacional

Basta consultar o blog: https://www.cnblogs.com/Dominic-Ji/articles/10929381.html

  • Cartão perfurador

Perfuração de fita de papel

  • Sistema de processamento em lote online

Sistema de processamento em lote online

  • Sistema de processamento em lote offline

Sistema de processamento em lote offline

Tecnologia multicanal

Núcleo único atinge efeito simultâneo

Conhecimento requerido

  • Concorrência

    Parece que a execução simultânea pode ser chamada de simultânea

  • Paralela

    Execução simultânea real

ps:

  • Paralelo deve ser considerado simultâneo
  • Computadores de núcleo único certamente não podem obter paralelismo, mas podem obter simultaneidade! ! !

Suplemento: Assumimos diretamente que um único núcleo é um núcleo, e apenas uma pessoa trabalha, não considera o número de núcleos na CPU

Ilustração técnica multicanal

Economize o tempo total gasto executando vários programas

Tecnologia multicanal

Conhecimento chave da tecnologia multicanal

Tomando espaço e tomando tempo

  • Multiplexação espacial

    Vários programas compartilham um conjunto de hardware de computador

  • Multiplexação no tempo

    Exemplo: lavar roupas por 30 anos, cozinhar por 50 anos, água fervente por 30 anos

    Um canal precisa de 110s, vários canais precisam apenas da longa troca de tarefas para economizar tempo

    Exemplo: jogar um jogo enquanto come e salva o estado

Mudar + salvar estado

"""
切换(CPU)分为两种情况
	1.当一个程序遇到IO操作的时候,操作系统会剥夺该程序的CPU执行权限
		作用:提高了CPU的利用率 并且也不影响程序的执行效率
	
	2.当一个程序长时间占用CPU的时候,操作吸引也会剥夺该程序的CPU执行权限
		弊端:降低了程序的执行效率(原本时间+切换时间)
"""

Teoria do processo

Conhecimento requerido

A diferença entre programa e processo

"""
程序就是一堆躺在硬盘上的代码,是“死”的
进程则表示程序正在执行的过程,是“活”的
"""

Agendamento de processos

  • Algoritmo de agendamento primeiro a chegar

    """对长作业有利,对短作业无益"""
    
  • Algoritmo de agendamento de prioridade de trabalho curto

    """对短作业有利,多长作业无益"""
    
  • Método de rotação do intervalo de tempo + fila de feedback de vários níveis

    img

Diagrama de três estados da execução do processo

Diagrama de três estados da execução do processo

Dois pares de conceitos importantes

  • Síncrona e assíncrona

    """描述的是任务的提交方式"""
    同步:任务提交之后,原地等待任务的返回结果,等待的过程中不做任何事(干等)
      	程序层面上表现出来的感觉就是卡住了
    
    异步:任务提交之后,不原地等待任务的返回结果,直接去做其他事情
      	我提交的任务结果如何获取?
        任务的返回结果会有一个异步回调机制自动处理
    
  • Bloqueio sem bloqueio

    """描述的程序的运行状态"""
    阻塞:阻塞态
    非阻塞:就绪态、运行态
    
    理想状态:我们应该让我们的写的代码永远处于就绪态和运行态之间切换
    

Combinação dos conceitos acima: a combinação mais eficiente é não-bloqueio assíncrono

Duas maneiras de iniciar o processo

Dingxinwan: A maneira como o código inicia processos e threads é basicamente o mesmo que escrever um código.Você aprende como iniciar um processo e como iniciar um thread

from multiprocessing import Process
import time


def task(name):
    print('%s is running'%name)
    time.sleep(3)
    print('%s is over'%name)


if __name__ == '__main__':
    # 1 创建一个对象
    p = Process(target=task, args=('jason',))
    # 容器类型哪怕里面只有1个元素 建议要用逗号隔开
    # 2 开启进程
    p.start()  # 告诉操作系统帮你创建一个进程  异步
    print('主')
    
    
# 第二种方式 类的继承
from multiprocessing import Process
import time


class MyProcess(Process):
    def run(self):
        print('hello bf girl')
        time.sleep(1)
        print('get out!')


if __name__ == '__main__':
    p = MyProcess()
    p.start()
    print('主')

Sumário

"""
创建进程就是在内存中申请一块内存空间将需要运行的代码丢进去
一个进程对应在内存中就是一块独立的内存空间
多个进程对应在内存中就是多块独立的内存空间
进程与进程之间数据默认情况下是无法直接交互,如果想交互可以借助于第三方工具、模块
"""

método de junção

A junção é deixar o processo principal aguardar a conclusão do código do subprocesso antes de continuar. Não afeta a execução de outros processos filhos

from multiprocessing import Process
import time


def task(name, n):
    print('%s is running'%name)
    time.sleep(n)
    print('%s is over'%name)


if __name__ == '__main__':
    # p1 = Process(target=task, args=('jason', 1))
    # p2 = Process(target=task, args=('egon', 2))
    # p3 = Process(target=task, args=('tank', 3))
    # start_time = time.time()
    # p1.start()
    # p2.start()
    # p3.start()  # 仅仅是告诉操作系统要创建进程
    # # time.sleep(50000000000000000000)
    # # p.join()  # 主进程等待子进程p运行结束之后再继续往后执行
    # p1.join()
    # p2.join()
    # p3.join()
    start_time = time.time()
    p_list = []
    for i in range(1, 4):
        p = Process(target=task, args=('子进程%s'%i, i))
        p.start()
        p_list.append(p)
    for p in p_list:
        p.join()
    print('主', time.time() - start_time)

Isolamento de dados entre processos

from multiprocessing import Process


money = 100


def task():
    global money  # 局部修改全局
    money = 666
    print('子',money)


if __name__ == '__main__':
    p = Process(target=task)
    p.start()
    p.join()
    print(money)

Outros métodos de objetos de processo

Processo zumbi e processo órfão

Daemon

Mutex

Acho que você gosta

Origin www.cnblogs.com/guanxiying/p/12751591.html
Recomendado
Clasificación