> ## 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.

# Pourquoi un NIF ?

L'intégration AppSignal pour Elixir s'appuie sur [un NIF](http://erlang.org/doc/man/erl_nif.html) qui appelle une bibliothèque pour effectuer le gros du travail, écrite en [Rust](https://www.rust-lang.org). Son rôle est de recevoir les données de l'application Elixir, de les normaliser et de les écrire dans un processus agent séparé via une socket Unix. L'agent envoie ensuite les données à AppSignal.com périodiquement pour un traitement supplémentaire. Consultez notre page [how AppSignal operates](/appsignal/how-appsignal-operates) pour plus d'informations sur le fonctionnement de notre agent.

Bien que l'utilisation d'un NIF présente des risques inhérents, son utilisation dans ce cas présente plusieurs avantages :

1. La surcharge est très faible. Les fonctions du NIF ne font rien de plus que recevoir des données et les envoyer à un thread worker, afin que la fonction C puisse retourner immédiatement. Elle est conçue pour être aussi rapide que possible tout en ayant un impact très faible sur le thread appelant, et générer une charge de garbage collection minimale.
2. Cela permet d'utiliser la même bibliothèque et le même agent utilisés par AppSignal pour [Ruby](/ruby), qui fonctionne sur des milliers de serveurs de production à travers le monde. C'est une technologie éprouvée, traitant un total combiné de 1 milliard de requêtes *par jour* (novembre 2016).
3. La bibliothèque et l'agent sont écrits en Rust, et leurs principales considérations de conception étaient (et restent) la robustesse et la performance.

En interne, le NIF AppSignal fonctionne comme suit : il fork/exec un processus agent séparé, auquel un thread worker dans le NIF envoie ses données via une socket Unix. Toutes les E/S et le traitement dans le NIF sont asynchrones, donc les appels à ses fonctions ne bloqueront jamais le scheduler. Dans l'événement très improbable où quelque chose paniquerait dans l'extension, l'extension se désactive sans faire tomber le processus hôte.

Bien que faire des protobufs Elixir natifs pour communiquer directement avec l'agent soit plus logique du point de vue BEAM, l'utilisation d'un NIF permet l'utilisation d'une seule bibliothèque. Cela réduit les problèmes potentiels grâce au volume de tests et d'ajustements déjà effectués. En se concentrant sur une seule base de code, AppSignal peut garantir la plus haute qualité pour tous ses clients dans tous les langages pris en charge.
