> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appsignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Por que uma NIF?

A integração AppSignal for Elixir depende de [uma NIF](http://erlang.org/doc/man/erl_nif.html) que chama uma biblioteca para fazer o trabalho pesado, escrita em [Rust](https://www.rust-lang.org). Seu trabalho é receber dados da aplicação Elixir, normalizá-los e gravá-los em um processo agent separado por um socket Unix. O agent então envia os dados para o AppSignal.com periodicamente para processamento adicional. Veja nossa página [como o AppSignal opera](/appsignal/how-appsignal-operates) para mais informações sobre como nosso agent funciona.

Embora usar uma NIF tenha riscos inerentes, usá-la neste caso tem várias vantagens:

1. O overhead é muito baixo. As funções na NIF não fazem nada além de receber dados e enviá-los a uma thread worker, para que a função C possa retornar imediatamente. Ela foi projetada para ser o mais rápida possível, com pouquíssimo impacto na thread chamadora, e gerar carga mínima de garbage collection.
2. Ela permite usar a mesma biblioteca e agent usados pelo AppSignal for [Ruby](/ruby), que roda em milhares de servidores de produção pelo mundo. É uma tecnologia testada em campo, processando, em conjunto, 1 bilhão de requisições *por dia* (novembro de 2016).
3. A biblioteca e o agent são escritos em Rust, e suas principais considerações de design eram (e continuam sendo) robustez e desempenho.

Internamente, a NIF do AppSignal funciona assim: ela faz fork/exec de um processo agent separado, para o qual uma thread worker na NIF envia seus dados por um socket Unix. Toda I/O e processamento na NIF é assíncrono, então chamadas às suas funções nunca vão segurar o scheduler. No caso muito improvável de algo na extensão entrar em pânico, a extensão se desabilita sem derrubar o processo host.

Embora fazer protobufs nativos em Elixir para se comunicar diretamente com o agent faça mais sentido do ponto de vista da BEAM, usar uma NIF permite usar uma única biblioteca. Isso diminui possíveis problemas devido ao volume de testes e ajustes finos que já aconteceram. Ao focar em uma única base de código, o AppSignal pode garantir a mais alta qualidade para todos os seus clientes em todas as linguagens suportadas.
