Pergunta

Será que uma chamada assíncrona sempre criar um novo segmento? Qual é a diferença entre os dois?

Será que uma chamada assíncrona sempre criar ou utilizar um novo segmento?

Wikipedia diz :

programação de computadores Em, eventos assíncronos são aqueles que ocorrem independentemente do fluxo de programa principal. ações assíncronas são ações executadas em um esquema sem bloqueio, permitindo que o fluxo de programa principal para continuar o processamento.

Eu sei assíncrono chamadas pode ser feito em linhas simples? Como isso é possível?

Foi útil?

Solução

Esta questão é danado perto demasiado gerais para responder.

No caso geral, uma chamada assíncrona não necessariamente criar um novo segmento. Essa é uma maneira de implementá-lo, com um pool de segmentos pré-existente ou processo externo sendo outras maneiras. Ele depende muito da linguagem, modelo de objeto (se houver), e meio ambiente tempo de execução.

Asynchronous significa apenas o segmento de chamada não sentar e esperar a resposta, nem a atividade assíncrona acontecer no segmento de chamada.

Além disso, você vai precisar para obter mais específico.

Outras dicas

Sempre que a operação que precisa acontecer de forma assíncrona não exige a CPU para fazer o trabalho, que a operação pode ser feito sem desova outro segmento. Por exemplo, se a operação assíncrona é I / O, a CPU não tem que esperar para o I / O para ser concluído. Ela só precisa de iniciar a operação, e pode então passar para outro trabalho enquanto o hardware I / O (controlador de disco, interface de rede, etc.) faz o trabalho de I / O. O hardware permite que o know CPU quando terminar interrompendo a CPU, e o sistema operacional, em seguida, entrega o evento para sua aplicação.

Frequently abstrações e APIs de nível superior não exponha da API assíncrona subjacente disponível a partir do sistema operacional e do hardware subjacente. Nesses casos, geralmente é mais fácil criar tópicos para fazer operações assíncronas, mesmo que o segmento gerado está apenas esperando em uma operação de I / O.

Se a operação assíncrona exige a CPU para fazer o trabalho, então geralmente que a operação tem que acontecer em outro segmento, a fim de que seja verdadeiramente assíncrona. Mesmo assim, ele realmente vai ser apenas assíncrono se houver mais de uma unidade de execução.

Não, chamadas assíncronas nem sempre envolvem tópicos.

Eles normalmente fazem iniciar algum tipo de operação que continua em paralelo com o chamador. Mas essa operação pode ser tratado por um outro processo, pelo sistema operacional, por outro hardware (como um controlador de disco), por algum outro computador na rede, ou por um ser humano. Tópicos não são a única maneira de fazer as coisas em paralelo.

Multi rosqueamento refere-se a mais do que uma operação ocorrendo no mesmo processo. Enquanto assíncrono programação estende-se por processos. Por exemplo, se minhas operações chama um serviço Web, o segmento não precisa esperar até o serviço web retorna. Aqui usamos programação assíncrona que permite que o segmento não esperar por um processo em outra máquina para completo. E quando ele começa a ficar resposta do webservice pode interromper o thread principal para dizer que o serviço web tenha concluído o processamento do pedido. Agora o segmento principal pode processar o resultado.

O JavaScript é single-threaded e assíncrona. Quando você usa XmlHttpRequest, por exemplo, você fornecê-lo com uma função de retorno de chamada que será executado de forma assíncrona quando os retornos de resposta.

John Resig tem uma boa explicação sobre a questão relacionada de como temporizadores trabalho em JavaScript .

Windows sempre teve o processamento assíncrono desde os tempos não preferenciais (versões 2.13, 3.0, 3.1, etc.) usando o loop de mensagem, muito antes de apoiar tópicos reais. Então, para responder sua pergunta, não, não é necessário criar um segmento para executar o processamento assíncrono.

chamadas assíncronas nem sequer precisam ocorrer no mesmo sistema / dispositivo como aquele invocando a chamada. Então, se a questão é, faz uma chamada assíncrona exigir um thread no processo atual, a resposta é não. No entanto, deve haver um fio de algum lugar execução processar a solicitação assíncrona.

thread de execução é um termo vago. Em sistemas tasking cooperativos, como o início de Macintosh e Windows OS'es, o segmento de execução poderia ser simplesmente o mesmo processo que fez o pedido a executar outra pilha, ponteiro de instrução, etc ... No entanto, quando as pessoas geralmente falam sobre chamadas assíncronas , eles tipicamente chamadas médias que são manipulados por um outro fio que seja intra-processo (isto é, dentro do mesmo processo) ou por um outro processo que seja inter-processos.

Note-se que entre processos (ou entre processos) comunicação (IPC) é comumente generalizada para incluir a comunicação intra-processo, uma vez que as técnicas de bloqueio e sincronização de dados são geralmente os mesmos, independentemente do que processar os segmentos separados de execução run-in.

Alguns sistemas permitem que você tirar proveito da concorrência no kernel para algumas instalações que utilizam chamadas de retorno. Para uma instância bastante obscura, callbacks IO assíncrono foram usadas para implementar non-blocking severs de internet de volta nos dias de multitarefa não-preferência dos Mac Sistema 6-8.

Desta forma, você tem a execução simultânea streams "em" você programar sem fios como tal .

meios apenas assíncronos que você não bloqueiam o seu programa à espera de alguma coisa (chamada de função, dispositivo, etc.) ao fim. Ele pode ser implementado em um segmento separado, mas também é comum o uso de uma thread dedicada para tarefas síncronas e comunicar através de algum tipo de sistema de eventos e, assim, alcançar assíncrona-como comportamento.

Há exemplos de programas assíncronos single-threaded. Algo como:

...do something
...send some async request
while (not done)
    ...do something else
    ...do async check for results

A natureza das chamadas assíncronas é tal que, se quiser que o aplicativo para continuar a executar enquanto a chamada está em andamento, você nem precisa desovar um novo tópico, ou pelo menos utilizar outro segmento que você criou exclusivamente para fins de lidar com chamadas de retorno assíncronas.

Às vezes, dependendo da situação, você pode querer chamar um método assíncrono, mas fazer com que pareça que o usuário seja ser síncrona (bloco ou seja, até que o método assíncrono sinalizou que está completa). Isto pode ser conseguido através de Win32 APIs tais como WaitForSingleObject .

Um operação assíncrona é uma operação que continua em segundo plano depois de ser iniciada, sem forçar o chamador a esperar que ela termine antes de executar outro código.

Em vez de bloquear o programa de chamada (ou segmento) até que uma resposta chega, um assíncrono (também chamado de non-blocking) implementação irá enviar uma solicitação ao serviço de banco de dados ou web ou qualquer outra coisa, em seguida, retornar imediatamente, deixando o seu programa continuar execução de outro código enquanto o serviço remoto envia uma resposta. Uma vez que a resposta chega, o sistema irá executar um callback (quer no seu ciclo de mensagem ou em um segmento IO porta de conclusão em separado, dependendo do ambiente), deixando seu punho código a resposta.

Multi-threading significa executar mais de uma thread de execução de cada vez. Neste modelo, todas as operações ainda estão síncrona, mas o CPU irá executar vários segmentos de operações síncronas, ao mesmo tempo.

Multi-threading faz mais sentido ao chamar múltipla (e independente) as operações vinculadas à CPU, em um processador multi-core. Por exemplo, um programa que analisa de forma independente cada pixel em uma imagem poderia dividir a imagem em uma faixa para cada núcleo do processador, em seguida, analisar cada tira em seu próprio segmento, ao mesmo tempo.

Leia mais aqui - https: // blog. slaks.net/2014-12-23/parallelism-async-threading-explained/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top