Outre le fait qu'Erlang a été spécifiquement développé pour être exécuté dans des situations simultanées / parallélisées / distribuées, les deux principales techniques qu'il emploie pour rendre cela possible sont:
Pas d'effets secondaires:
Cela signifie que lorsque vous donnez à une fonction une donnée à exécuter, cela n'affectera pas, sauf dans des cas très stricts, tout le reste du système / processus en cours d'exécution. Cela signifie que si vous exécutez une fonction 300 fois en même temps, aucune de ces 300 exécutions de la fonction n'affectera les autres.
La technique de mise en œuvre pour garantir l'absence d'effets secondaires est appelée «immuabilité», ce qui signifie grosso modo qu'elle ne peut pas être modifiée (modifiée). Cela signifie que dès que vous créez une variable, la valeur de cette variable ne peut pas être modifiée. Erlang implémente ce comportement avec une "affectation unique", donc après avoir attribué une valeur à une variable, vous ne pouvez plus lui attribuer de valeur.
X = 1.
X = 2. // This is not a valid operation
Cela garantit qu'aucun code ne peut accidentellement modifier la valeur de X provoquant une condition de concurrence critique, il est donc intrinsèquement thread-safe et l'utilisation simultanée devient triviale. C'est un comportement très rare parmi les langages logiciels et le plus grand moyen par lequel Erlang parvient à être aussi bien adapté à une exécution simultanée.
Le modèle d'acteur:
Il s'agit d'une méthode particulière de modélisation qui a montré que la mise en œuvre et la gestion du traitement simultané étaient très simples pour les développeurs. Directement à partir de wikipedia (http://en.wikipedia.org/wiki/Actor_model):
Le modèle Acteur adopte la philosophie que tout est acteur. Ceci est similaire à tout ce qui est une philosophie d'objet utilisée par certains langages de programmation orientés objet, mais diffère en ce que le logiciel orienté objet est généralement exécuté séquentiellement, tandis que le modèle Actor est intrinsèquement concurrent. Un acteur est une entité de calcul qui, en réponse à un message qu'il reçoit, peut simultanément: envoyer un nombre fini de messages à d'autres acteurs; créer un nombre fini de nouveaux acteurs; désigner le comportement à utiliser pour le prochain message qu'il recevra. Il n'y a pas de séquence supposée pour les actions ci-dessus et elles pourraient être effectuées en parallèle. Le découplage de l'expéditeur des communications envoyées a été une avancée fondamentale du modèle Acteur permettant des communications asynchrones et des structures de contrôle comme modèles de transmission de messages.