Razões para usar APIs assíncronas
A razão pela qual o conceito de assíncrono se tornou popular no Web2.0 é porque o JavaScript é executado em um único thread no navegador e também usa um thread com a renderização da interface do usuário. Isso significa que a renderização e as respostas da interface do usuário estão em um estado estagnado quando o JavaScript é executado. Para uma melhor experiência do usuário, uma abordagem assíncrona (é claro, isso está no chamado idioma de thread único) não bloqueia o thread principal e continua a responder às operações do usuário. Isso pertence à categoria de experiência do usuário.
Da mesma forma, se os engenheiros com experiência em outros idiomas, é claro, entendam que a troca da CPU entre os threads requer muito tempo (principalmente alternando entre contextos e cache), portanto, melhorar a eficiência também é um motivo para usar APIs assíncronas.
Claro, isso não está absolutamente correto, mas todo mundo diz isso. Porque se a sobrecarga da criação de multithreads for menor que a execução paralela, o método de multithreading é a primeira opção, que é frequentemente considerada uma tarefa de processamento intensiva em CPU.
Em suma, a API de IO ou assíncrona assíncrona pode ser considerada como o recurso do nó, porque é uma plataforma que aplica o IO assíncrono na camada de aplicativos em larga escala e se esforça para alocar recursos com mais eficiência em um único thread.
Sobre promessa
Aqui, este artigo não pretende explicar o uso da promessa em detalhes, mas apenas explica brevemente algumas das APIs e o escopo da promessa:
// Combinando a função fs.readdir 'fs.readdir para criar um promissor nativo promisetask = nova promessa (função (resolver, rejeitar) {fs.readdir ('/var/www ', function (err, arquivos) {if (! Console.log ('Conteúdo é:' Arquivos+); pro promisetask.catch (function (err) {console.log ('o erro é relatado como:'+err);});Como esperar por várias promessas para concluir?
// Conecte o PROMISETASK.THEN (FUNÇÃO) {var readfilsepromisElist = files.map (function (file, index) {return promey (function (resolve, reject) {fs.readfile (file, 'utf-8', function (err) {if (! Promete.all (readfilsepromiselist);}). Então (function (filestRray) {console.log ('a chamada leitura de arquivo concluída:'+filestRray);});Este código mostra a elegância do desenvolvimento do NodeJS.
Então, qual é o problema?
A linguagem mais elegante atualmente ainda depende do sistema operacional, ou seja, as limitações do sistema ainda existem:
Não sei se esse erro pode ser interpretado como alças de operação de arquivo exausto, mas espero que você possa entender este artigo que o sistema operacional não pode abrir vários arquivos ilimitados ao mesmo tempo.
E isso:
Isso é fácil de entender, e a memória está esgotada. Obviamente, o limite de memória pode ser ajustado adicionando os dois parâmetros de corrida a seguir:
Nó-Max-Old-Space-tamanho = 8192 ./index.js #unit mb node-max-new space-size = 2048 ./index.js #unit kb
Os parâmetros acima entram em vigor quando o V8 é inicializado e não pode ser alterado dinamicamente quando eles entram em vigor.
Muitas pessoas podem propor que essas duas limitações também existam em outros idiomas. Sim, outros idiomas também existem.
No entanto, modelos poderosos de programação GC ou multithread em outros idiomas podem permitir que os engenheiros os liberem a tempo após a solicitação de recursos do sistema.
Embora os recursos desnecessários do sistema possam ser lançados manualmente no NodeJS, todas as operações no programa de referência podem ser lançadas a tempo?
Por exemplo, o pacote NodeJS Redis (NPM Install Redis) não fornece métodos de operação de sincronização.
Isso significa que é necessário mais controle de processo no processo de desenvolvimento. Infelizmente, o NodeJS em um sistema de thread único não é bom nisso, porque não existe um conceito de threading, sem mecanismo de travamento, e é impossível incluir mecanismos de semáforo no sentido usual. O resultado é que os engenheiros não sabem quando liberar manualmente os recursos.
A menos que você tenha controle absoluto sobre o seu projeto, você não usa pacotes de terceiros que usam APIs assíncronas.
Portanto, a conclusão atual é que a promessa é apenas uma técnica de desenvolvimento. Compreender isso não é adequado para todos os cenários de desenvolvimento.
Resumir
O exposto acima é sobre a API assíncrona node.js e suas limitações. Espero que este artigo seja útil para todos. Se você tiver alguma dúvida, deixe uma mensagem para se comunicar.