Appearance
Worker Threads - Partager la mémoire 
Dans le contexte de worker_threads dans Node.js, "la mémoire partagée" se réfère à la capacité des threads de travailler directement sur la même zone de mémoire, plutôt que de devoir copier et échanger des messages entre eux. Node.js introduit le concept de "SharedArrayBuffer" pour gérer la mémoire partagée entre les threads.
SharedArrayBuffer 
SharedArrayBuffer est un type de données qui permet à plusieurs workers d'accéder à la même zone de mémoire sous-jacente. Cela peut être bénéfique pour certaines applications nécessitant des échanges de données fréquents et à faible latence entre les threads, car cela évite la surcharge de sérialisation et désérialisation.
Comment utiliser SharedArrayBuffer 
- Création d'un SharedArrayBuffer - Vous pouvez créer un - SharedArrayBufferde la même manière que vous créez un- ArrayBuffer, en spécifiant la taille en octets.javascript- const sharedBuffer = new SharedArrayBuffer(1024); // 1024 octets- const sharedBuffer = new SharedArrayBuffer(1024); // 1024 octets
- Utilisation avec TypedArray - Pour lire ou écrire dans un - SharedArrayBuffer, vous devez utiliser un- TypedArray, comme- Int32Arrayou- Float64Array.javascript- const array = new Int32Array(sharedBuffer);- const array = new Int32Array(sharedBuffer);
- Passer SharedArrayBuffer entre threads - Vous pouvez passer directement un - SharedArrayBuffercomme message entre le thread principal et le worker (ou entre deux workers).javascript- worker.postMessage(sharedBuffer);- worker.postMessage(sharedBuffer);
- Atomics - Lors de l'utilisation de la mémoire partagée, il peut y avoir des situations où plusieurs threads essaient d'accéder à la même mémoire simultanément. Cela peut conduire à des conditions de concurrence. Pour garantir la sécurité des opérations sur - SharedArrayBuffer, Node.js fournit le module- Atomicsqui offre un ensemble de méthodes pour effectuer des opérations atomiques (indivisibles) sur des données.- Par exemple, pour augmenter de manière sûre une valeur dans un - Int32Array:javascript- Atomics.add(array, index, 1);- Atomics.add(array, index, 1);
Points à considérer 
- Complexité : Bien que la mémoire partagée permette une communication plus rapide entre les threads, elle introduit également une complexité supplémentaire. Vous devez être très prudent pour éviter les conditions de concurrence. 
- Portabilité : L'utilisation de - SharedArrayBuffera été temporairement désactivée dans la plupart des navigateurs à la suite de vulnérabilités de sécurité (comme Spectre). Bien que cela ne concerne pas directement Node.js, cela montre que la mémoire partagée peut avoir des implications de sécurité.
- Cas d'utilisation : La mémoire partagée est bénéfique lorsque vous avez besoin d'échanges de données fréquents entre threads. Cependant, pour de nombreux scénarios, le modèle de communication basé sur des messages (sans mémoire partagée) est suffisant et souvent plus simple à mettre en œuvre correctement.