Conceito assíncrono / espera de Python assíncrono, uso (1)

  • Programação IO e síncrona e assíncrona

    Síncrono e assíncrono, bloqueio e não bloqueio são todos conceitos sobre E / S.

    Embora os modelos multi-thread e multi-process resolvam o problema de simultaneidade, a sobrecarga dos threads de comutação no sistema também é muito grande.

    Outra solução para o problema de E / S é a E / S assíncrona. Quando o código precisa executar uma operação de E / S demorada, apenas emite instruções de E / S, não espera pelo resultado da E / S e depois executa outro código. Após um período de tempo, quando o IO retorna o resultado, ele notifica a CPU para processar novamente.

    Durante o período de "Emitindo uma solicitação de E / S" até o recebimento de "conclusão de E / S", no modelo de E / S síncrono, o encadeamento principal só pode ser suspenso (perdendo tempo de CPU), mas, no modelo de E / S assíncrono, o encadeamento principal não descansa. Em vez disso, continue processando outras mensagens no loop de mensagens. Dessa maneira, no modelo de E / S assíncrono , um encadeamento pode processar várias solicitações de E / S ao mesmo tempo e não há operação para alternar encadeamentos .

  • Programação IO

    O núcleo do computador é a CPU. Os programas e dados calculados pela CPU só podem estar na memória. Portanto, os elementos necessários no momento da operação da CPU já devem estar na memória. Para aqueles que não estão na memória, é necessário carregar a memória de entrada. Os dados que não são usados ​​após o cálculo precisam ser enviados para o disco.

    Como a velocidade de cálculo da CPU é muito maior que a velocidade de E / S, há uma área de subdivisão da programação de E / S.

    A CPU pode executar apenas um processo por vez.

    Sob essas condições, existem vários programas para programação de E / S:

    1. Deixe a CPU aguardar a conclusão da E / S antes de continuar executando o código subsequente: chamado sincronização
    2. A CPU não espera E / S para fazer outras coisas: chamada assíncrona

    A diferença entre síncrona e assíncrona é se a CPU espera pelo resultado da execução de E / S.

    A capacidade de operar E / S é finalmente percebida pelo sistema operacional e vários idiomas encapsulam a interface fornecida pelo sistema operacional.

    O processo de programação de variáveis ​​que podem ser armazenadas ou transferidas da memória é chamado de serialização e é chamado de decapagem no Python , que é o que o módulo faz.pickle

  • Sub-rotina (também chamada função)

    É uma função no sentido tradicional:

    • Chamado hierarquicamente em todos os idiomas;
    • A chamada de sub-rotina é realizada através da pilha;
    • Um thread é para executar uma sub-rotina;
    • A chamada da sub-rotina é sempre uma entrada e um retorno, e a sequência de chamadas é clara
  • Coroutine

    Também conhecido como microtreads, fibras.

    A corotina parece uma sub-rotina, mas durante a execução, pode ser interrompida dentro da sub-rotina e girar para executar outra sub-rotina.

    A interrupção e outras sub-rotinas mencionadas aqui não são chamadas de função .

    def A():
        print('1')
        print('2')
        print('3')
    
    def B():
        print('x')
        print('y')
        print('z')
        
    # 在协程下输出结果可能是
    1
    2
    x
    y
    3
    z
    # 关键点在于,这里并不是A调用B
    

    Não é uma chamada de função, o resultado se parece com vários threads, mas a corotina é executada em um thread.

    Sub-rotinas são um caso especial de corotinas.

    Comparado com multithreading:

    • A eficiência de execução da corotina é alta, porque a alternância de subprograma não é alternada por segmentos, não há sobrecarga de alternância de segmentos
    • Não há necessidade de mecanismo de travamento multithread
  • As corotinas utilizam CPUs multi-core

    Múltiplas sub-funções são executadas na corotina e no mesmo encadeamento.

    Deseja fazer pleno uso da CPU multi-core, o método é multi-processo + corotina.

  • Python e corotinas

    O suporte do Python às corotinas é obtido através do generator.

    Envolvendo generator, next, yeildvários conceitos.

  • A diferença entre assíncio e assíncrono / espera

    asyncio ( documento oficial ) é uma biblioteca padrão introduzida no Python 3.4 que suporta E / S assíncrona , usando sintaxe;yeild

    assíncrono / Await é Python3.5 simplificar o código introduzido novo sintaxe é Python3.3 em yield frome Python3.4 são asynciocombinados para produzir a nova sintaxe. É usado para resolver o problema de que o relacionamento entre o gerador de rendimento e o assíncrono não pode ser efetivamente distinguido na programação assíncrona do Python .

    Precisa adicionar conhecimento preliminar:

    " Conceito de rendimento e compreensão de uso em Python "

  • Referência

  1. Site oficial de Liao Xuefeng
  2. Como async e aguardam o trabalho no Python 3.5?
Publicado 880 artigos originais · elogiou 1331 · 980.000 visualizações

Acho que você gosta

Origin blog.csdn.net/The_Time_Runner/article/details/105646093
Recomendado
Clasificación