Processamento simultâneo da camada de linguagem dinâmica

Processamento simultâneo da camada de linguagem dinâmica

Processo: O programa no computador sobre uma atividade em execução em um determinado conjunto de dados é a unidade básica do sistema para alocação e programação de recursos. É a base para operar a estrutura de dados e é um "programa de execução"; modelo do processo: vários No sistema de programação Dao, os processos são executados alternadamente no processador e o estado muda constantemente; Executar: quando um processo é executado no processador, diz-se que o processo está em execução e o número de processos neste estado é menor ou igual ao número de processadores Para um sistema de processador único, há apenas um processo no estado de execução. Quando não há outro processo para executar (por exemplo, todos os processos estão em um estado de bloqueio ), o processo ocioso do sistema geralmente é executado automaticamente; pronto: quando um processo obtém a exceção de processamento Todos os recursos necessários, exceto a máquina, podem ser executados assim que o processador for obtido. Diz-se que o processo está no estado pronto. o processo pronto pode ser enfileirado de acordo com várias prioridades, como quando um processo entra no estado pronto devido ao esgotamento das fatias de tempo., Enfileirado na fila de baixa prioridade, quando o processo entra no estado pronto pela conclusão do I / Operação O, enfileirada na fila de alta prioridade; bloqueio: também conhecido como estado de espera ou hibernação, um processo está aguardando a ocorrência de um evento (como uma solicitação de E / S e espera a conclusão de E / S, etc.) e interromper temporariamente a execução. Neste momento, mesmo que o processador seja atribuído ao processo, ele não pode ser executado; o modelo de cinco estados do processo: para um sistema real, o estado do processo e sua transição são mais complicados, Novo estado: Corresponde ao estado em que o processo não foi submetido quando acabou de ser criado, e aguardando que o sistema complete todas as informações necessárias para criar o processo; Ativo pronto / Ainda pronto: o estado em que o processo está no principal memória e pode ser agendado / refere-se ao processo que está sendo trocado O estado pronto quando o armazenamento auxiliar é atingido é um estado que não pode ser agendado diretamente. Somente quando não há nenhum processo de estado pronto ativo na memória principal, ou o processo de estado pronto suspenso tem uma prioridade maior, o sistema irá chamar o processo em estado de prontidão suspenso de volta à memória principal e convertido em pronto ativo; em execução, bloqueio ativo / bloqueio estático: refere-se ao processo já está na memória principal, uma vez que o tempo de espera é gerado, ele entra no estado pronto ativo / o estado de bloqueio quando o processo é comutado para a memória auxiliar, uma vez que o evento de espera ocorre Ele entra no estado pronto estático; o estado de término: o processo terminou a execução, recupera outros recursos exceto o bloco de controle do processo, e permitir que outros processos coletem informações relevantes do bloco de controle de processo; devido a solicitações simultâneas do usuário, crie para cada solicitação Um processo obviamente não é viável. Da perspectiva da sobrecarga de recursos do sistema ou da eficiência de resposta às solicitações do usuário, o conceito de thread é introduzido.

Thread: às vezes chamado de processo leve, é a menor unidade do fluxo de execução do programa. É uma entidade no processo, que é a unidade básica programada independentemente e despachada pelo sistema. Não possui recursos do sistema, mas apenas alguns recursos essenciais em operação, mas pode compartilhar o que o processo possui com outros processos que pertencem ao mesmo processo. Todos os recursos. Um thread pode criar e cancelar outro thread, e vários threads no mesmo processo podem ser executados simultaneamente. Um thread é um único fluxo de controle sequencial em um programa e uma unidade de execução relativamente independente e escalonável em um processo. É a unidade básica de escalonamento e despacho independente da CPU no sistema, que se refere à unidade de programação da execução programa. Múltiplos threads em execução ao mesmo tempo em um único programa para completar tarefas diferentes tornam-se multi-threaded. Cada programa tem pelo menos um thread. Se o programa tiver apenas um thread, é o próprio programa. Status do thread: pronto: o thread tem todas as condições para rodar, logicamente pode rodar, esperando o processador; rodando: o thread ocupa o processador está rodando; bloqueando: o thread está esperando por um evento (como um semáforo), logicamente não realizado.

Corrotina: é uma thread leve no modo de usuário, e o agendamento é completamente controlado pelo usuário; a corrotina tem seu próprio contexto de registro e pilha; quando o agendamento de corrotina é alternado, o contexto de registro e a pilha são salvos em outros lugares, e a chave é alternada de volta. Neste momento, o contexto de registro salvo anteriormente e a pilha são restaurados. A manipulação direta da pilha basicamente não tem a sobrecarga da alternância do kernel e as variáveis ​​globais podem ser acessadas sem bloqueio, então a alternância de contexto é muito rápida .

A diferença entre um processo e um thread: um thread é uma unidade de execução em um processo, e há pelo menos um thread no processo, compartilhando o espaço de endereço do processo, e o processo tem seu próprio espaço de endereço independente; o processo é a unidade de alocação e propriedade de recursos, no mesmo processo. Os threads compartilham os recursos do processo; o thread é a unidade básica de programação do processador, mas o processo não é; ambos podem ser executados simultaneamente; cada thread independente tem uma entrada para a operação do programa, a sequência de execução e a saída do programa são executadas sequencialmente, mas a thread não pode ser executada independentemente, deve ser armazenada no programa de aplicação, e o programa de aplicação fornece controle de execução de múltiplas threads

A diferença entre thread e co-rotina: um thread pode ter várias corrotinas e um processo também pode ter várias corrotinas sozinho; os threads de processo são todos mecanismos síncronos, enquanto as corrotinas são assíncronas; as corrotinas podem manter o estado da última chamada, cada vez que o processo é reinserido, é equivalente a entrar no estado da última chamada.

Multiprocessos: Ao mesmo tempo, se dois ou mais processos podem ser executados no mesmo sistema computacional, se mais um processo for aberto, mais um recurso é alocado, a comunicação entre os processos é inconveniente;

Multithreading: Threading é dividir um processo em várias fatias.Cada fatia pode ser um processo independente.A diferença de multi-processo é que apenas os recursos de um processo são usados, e os threads podem se comunicar diretamente;

Bloqueio síncrono: Multi-processo: Os primeiros programas do lado do servidor resolvem o problema de E / S simultânea por meio de multiprocessos e multi-threads; uma solicitação cria um processo e, em seguida, o processo filho entra em um loop para interagir com o cliente enquanto bloqueio síncrono, envio e recebimento de dados do processo; multithreading: o thread pode enviar dados diretamente para uma conexão do cliente; etapas: criar um soquete, inserir o loop while, bloquear a operação de aceitação do processo, aguardar a conexão do cliente entrar, o principal processo passa pelo modelo de multiprocessos Fork cria um processo filho. No modelo multi-threaded, você pode criar um thread filho. Depois que o processo / thread filho é criado com sucesso, ele entra no loop while e bloqueia na chamada recv. Esperando que o cliente envie dados ao servidor. Depois de receber os dados, o programa do servidor processa os dados e, em seguida, envia Enviar uma resposta ao cliente. Quando a conexão do cliente é fechada, o processo / thread filho sai e destrói todos os recursos . O processo / thread principal reciclará este processo / thread filho; Desvantagem: Este modelo depende muito do número de processos para resolver problemas de simultaneidade, e iniciar um grande número de processos trará consumo adicional de agendamento de processo

Assíncrono sem bloqueio: agora, todos os tipos de programas de servidor IO assíncronos de alta simultaneidade são baseados em epoll (número ilimitado de conexões, sem necessidade de pesquisa). IO reúso programas assíncronos não bloqueantes usam o modelo clássico Reactor, que como o nome indica, significa um reator.Ele não processa nenhuma transmissão e recepção de dados, mas pode monitorar as mudanças de evento de um identificador de socket. Modelo do Reactor: Adicionar: adicionar um soquete ao Reactor, Definir: modificar o evento correspondente ao soquete, como legível e gravável, Del: remover do Reactor, Retorno de chamada: chamar de volta a função especificada após a ocorrência do evento. Nginx: reator multi-threaded, swoole: reator multi-threaded + trabalhador multi-processo

Extensão swoole do PHP: mecanismo de comunicação de rede assíncrono, paralelo e de alto desempenho do PHP, escrito em linguagem C pura, fornece servidor multithread assíncrono em linguagem PHP, cliente de rede TCP / UDP assíncrono, mysql assíncrono, redis assíncrono, pool de conexão de banco de dados, Asynctask , fila de mensagens, cronômetro de milissegundos, leitura e gravação de arquivos assíncronos, consulta DNS assíncrona; além do suporte de E / S assíncrona, swoole projetou várias estruturas de dados simultâneas e mecanismos de comunicação IPC para o modo multiprocessos PHP, que pode simplificar muito muitos trabalho de programação simultânea de processo; swoole2.0 suporta uma co-rotina semelhante à linguagem Go, que pode usar código totalmente síncrono para implementar programas assíncronos

Fila de mensagens: após o registro do usuário, você precisa enviar um e-mail de registro e uma mensagem de registro; modo serial: depois que as informações de registro são gravadas com sucesso no banco de dados, o e-mail de registro é enviado e, em seguida, a mensagem de registro é enviada; modo paralelo : depois que as informações de registro são gravadas com sucesso no banco de dados, elas são enviadas. Ao registrar o e-mail, envie o SMS de registro; modo de fila de mensagens: Depois que as informações de registro são gravadas com sucesso no banco de dados, as informações de sucesso são gravadas na fila, e então o sucesso é devolvido diretamente ao usuário.O tempo para gravar na fila é muito curto e pode ser ignorado e, em seguida, Enviar e-mail e SMS de forma assíncrona. Desacoplamento de aplicativos: Descrição do cenário: Depois que o usuário faz um pedido, o sistema de pedidos precisa notificar o sistema de estoque. Se o sistema de estoque estiver inacessível, a redução do pedido falhará, resultando na falha do pedido; o sistema de pedido é acoplado ao sistema de estoque; fila de referência: depois que o usuário faz um pedido, o sistema de pedido conclui o processamento de persistência, escreve a mensagem para a fila de mensagens e retorna o pedido do usuário O pedido foi feito com sucesso, assine a mensagem do pedido e use o método pull / push para obter as informações do pedido. O sistema de estoque executa operações de estoque com base nas informações do pedido . Corte de pico de tráfego: cenário do aplicativo: atividade de pico, aumento instantâneo no tráfego, forte pressão do servidor. O usuário inicia uma solicitação e o servidor a grava na fila de mensagens primeiro após recebê-la. Se o comprimento da fila de mensagens exceder o máximo, ele relatará um erro ou avisará o usuário diretamente. O programa subsequente lê a fila de mensagens e, em seguida, processa para controlar a quantidade de solicitações e aliviar o tráfego intenso. Processamento de logs: Cenário do aplicativo: Resolva a transmissão de um grande número de logs. O programa de coleta de log grava o programa na fila de mensagens e, em seguida, consome o log por meio da assinatura do programa de processamento de log. Comunicação de mensagem: Cenário de aplicação: sala de chat. Vários clientes assinam o mesmo tópico para publicar e receber mensagens. Produtos de fila de mensagens comuns: Kafka, ActiveMQ, ZeroMQ, RabbitMQ, Redis, etc.

Solicitação simultânea da interface: curl_multi_init

Acho que você gosta

Origin blog.csdn.net/xghchina/article/details/114635021
Recomendado
Clasificación