The Codest
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Indústrias
    • Fintech e Banca
    • E-commerce
    • Adtech
    • Tecnologia da saúde
    • Fabrico
    • Logística
    • Automóvel
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
Seta para trás VOLTAR
2021-07-20
Desenvolvimento de software

MÃE! Ele bloqueou os tópicos de novo!

The Codest

Pawel Rybczynski

Software Engineer

"Não bloqueie o loop de eventos..." - provavelmente já ouviu esta frase muitas vezes... Não me surpreende porque é uma das premissas mais importantes quando se trabalha com Node. Mas há também uma segunda "coisa" que não deve ser bloqueada - o Worker Pool. Se for negligenciado, pode ter um impacto significativo no desempenho da aplicação e até na sua segurança.

Fios

O principal aspeto a ter em conta: existem dois tipos de linhas em Node.js: Main Thread - que é gerido por Ciclo de eventose Pool de trabalhadores (pool de threads) - que é o pool de threads -
graças à libuv. Cada um deles tem uma função diferente. O objetivo do primeiro é lidar com operações de E/S não bloqueantes, e o segundo é responsável pelo trabalho intensivo da CPU e também pelo bloqueio de E/S.

diagrama da libuv

Mas o que é uma linha e em que é que é diferente de um processo? Existem várias diferenças, mas a mais importante para nós é a forma como a memória lhes é atribuída. Pode pensar num processo como se fosse uma aplicação. Dentro de cada processo, há um pedaço de memória dedicado apenas a esse processo. Assim, um processo não tem acesso à memória do segundo, e essa propriedade garante alta segurança. Para estabelecer comunicação entre eles, temos que fazer algum trabalho. Threads são diferentes. As threads são executadas dentro de um processo e partilham a mesma memória, pelo que não há qualquer problema com as threads que partilham dados.

No entanto, há uma questão que causa um problema. É a chamada condição de corrida. As threads podem ser executadas ao mesmo tempo, por isso como é que sabemos qual termina primeiro? Pode acontecer que, na primeira vez que a executamos, a primeira operação termine primeiro e, na vez seguinte, pode acontecer o contrário e a segunda operação terminar antes da primeira. Imagine trabalhar com operações de escrita/leitura nestas condições! Um pesadelo! Por vezes é muito difícil escrever corretamente código num ambiente multi-threaded.

Além disso, as linguagens multithread têm uma grande sobrecarga de memória porque criam um thread separado para cada pedido; assim, se quiser chamar 1000 pedidos, criam 1000 threads.

Como lidar com este problema? Utilizar um único fio! E é isso que Nó oferece-lhe.

ciclo de eventos de um só segmento

Como JavaScript criador Encorajo-vos a ver o filme
em que Bart Belder explica claramente o conceito de ciclo de eventos. O diagrama acima foi retirado da sua apresentação. E se não conhece estes termos, ambos Nó e a Libuv tem uma excelente documentação 🙂

Sobre o bloqueio

Em Desenvolvimento do JavaScript indústria dizem que porque Nó é single-threaded e não-bloqueante, é possível obter uma maior simultaneidade com os mesmos recursos do que com soluções multi-threaded. É verdade, mas não é tão bonito e fácil como pode parecer.

Desde Node.js é single-threaded (parte JS), as tarefas com uso intensivo de CPU bloquearão todos os pedidos em andamento até que a tarefa específica seja concluída. Então, é verdade que em Node.js pode bloquear todos os pedidos só porque um deles tinha uma instrução de bloqueio no seu interior. O código de bloqueio significa que demora mais do que alguns milissegundos a terminar. Mas não confunda tempo de resposta longo com bloqueio. A resposta da base de dados pode demorar muito tempo, mas não bloqueia o seu processo (aplicação).

Os métodos bloqueantes são executados de forma síncrona e os métodos não bloqueantes são executados de forma assíncrona.

Como é que pode abrandar (ou bloquear) o seu ciclo de eventos?

  • regex vulnerável - uma expressão regular vulnerável é aquela em que o seu motor de expressão regular pode demorar um tempo exponencial; pode ler mais sobre elas aqui,
  • Operações JSON em objectos de grandes dimensões,
  • utilizando APIs síncronas do Nó em vez de versões assíncronas; todos os métodos de E/S da biblioteca normalizada do Node.js fornecem também as suas versões assíncronas,
  • outros erros de programação, como os loops infinitos síncronos.

Nesse caso, uma vez que o Worker Pool utiliza um conjunto de threads, é possível bloqueá-las também? Infelizmente, sim 🙁 Nó baseia-se numa filosofia um thread para muitos clientes. Vamos supor que uma determinada tarefa executada por um Worker específico é muito complexa e precisa de mais tempo para ser concluída. Como resultado, o Worker fica bloqueado e não pode ser utilizado para executar qualquer uma das outras tarefas pendentes até que as suas instruções sejam executadas. Como já deve ter adivinhado, isso pode afetar o desempenho. É possível evitar esses problemas minimizando a variação nos tempos das tarefas usando o particionamento de tarefas.

Conclusão

Evite o bloqueio, isso é certo. Se puder, escolha sempre versões assíncronas das APIs da biblioteca padrão. Caso contrário, depois de executar a sua aplicação, o cliente pode ter vários problemas, começando com a degradação do débito e terminando com a desistência total, o que é fatal do ponto de vista do utilizador.

Ler mais:

Porque é que deve (provavelmente) utilizar Typescript

Como não matar um projeto com más práticas de codificação?

Estratégias de obtenção de dados no NextJS

Artigos relacionados

Ilustração de uma aplicação de cuidados de saúde para smartphone com um ícone de coração e um gráfico de saúde em ascensão, com o logótipo The Codest, representando soluções digitais de saúde e HealthTech.
Desenvolvimento de software

Softwares para o setor de saúde: Tipos, casos de uso

As ferramentas em que as organizações de cuidados de saúde confiam atualmente não se assemelham em nada às fichas de papel de há décadas atrás. O software de cuidados de saúde apoia agora os sistemas de saúde, os cuidados aos doentes e a prestação de cuidados de saúde modernos em...

OCODEST
Ilustração abstrata de um gráfico de barras em declínio com uma seta ascendente e uma moeda de ouro que simboliza a eficiência ou a poupança de custos. O logótipo The Codest aparece no canto superior esquerdo com o slogan "In Code We Trust" sobre um fundo cinzento claro
Desenvolvimento de software

Como dimensionar a sua equipa de desenvolvimento sem perder a qualidade do produto

Aumentar a sua equipa de desenvolvimento? Saiba como crescer sem sacrificar a qualidade do produto. Este guia cobre sinais de que é hora de escalar, estrutura da equipe, contratação, liderança e ferramentas - além de como o The Codest pode...

OCODEST
Desenvolvimento de software

Construir aplicações Web preparadas para o futuro: ideias da equipa de especialistas do The Codest

Descubra como o The Codest se destaca na criação de aplicações web escaláveis e interactivas com tecnologias de ponta, proporcionando experiências de utilizador perfeitas em todas as plataformas. Saiba como a nossa experiência impulsiona a transformação digital e o negócio...

OCODEST
Desenvolvimento de software

As 10 principais empresas de desenvolvimento de software sediadas na Letónia

Saiba mais sobre as principais empresas de desenvolvimento de software da Letónia e as suas soluções inovadoras no nosso último artigo. Descubra como estes líderes tecnológicos podem ajudar a elevar o seu negócio.

thecodest
Soluções para empresas e escalas

Fundamentos do desenvolvimento de software Java: Um Guia para Terceirizar com Sucesso

Explore este guia essencial sobre o desenvolvimento de software Java outsourcing com sucesso para aumentar a eficiência, aceder a conhecimentos especializados e impulsionar o sucesso do projeto com The Codest.

thecodest

Subscreva a nossa base de conhecimentos e mantenha-se atualizado sobre os conhecimentos do sector das TI.

    Sobre nós

    The Codest - Empresa internacional de desenvolvimento de software com centros tecnológicos na Polónia.

    Reino Unido - Sede

    • Office 303B, 182-184 High Street North E6 2JA
      Londres, Inglaterra

    Polónia - Pólos tecnológicos locais

    • Parque de escritórios Fabryczna, Aleja
      Pokoju 18, 31-564 Cracóvia
    • Embaixada do Cérebro, Konstruktorska
      11, 02-673 Varsóvia, Polónia

      The Codest

    • Início
    • Sobre nós
    • Serviços
    • Case Studies
    • Saber como
    • Carreiras
    • Dicionário

      Serviços

    • Aconselhamento
    • Desenvolvimento de software
    • Desenvolvimento backend
    • Desenvolvimento de front-end
    • Staff Augmentation
    • Programadores de back-end
    • Engenheiros de nuvem
    • Engenheiros de dados
    • Outros
    • Engenheiros de GQ

      Recursos

    • Factos e mitos sobre a cooperação com um parceiro externo de desenvolvimento de software
    • Dos EUA para a Europa: Porque é que as empresas americanas decidem mudar-se para a Europa?
    • Comparação dos centros de desenvolvimento da Tech Offshore: Tech Offshore Europa (Polónia), ASEAN (Filipinas), Eurásia (Turquia)
    • Quais são os principais desafios dos CTOs e dos CIOs?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Direitos de autor © 2026 por The Codest. Todos os direitos reservados.

    pt_PTPortuguese
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek cs_CZCzech pt_PTPortuguese