Atomics - Guide rapide

Atomique

L'Atomics est un objet en JavaScript qui fournit des opérations atomiques à effectuer en tant que méthodes statiques. Tout comme les méthodes de l'objet Math, les méthodes et les propriétés d'Atomics sont également statiques. Atomics sont utilisés avec les objets SharedArrayBuffer.

Les opérations Atomic sont installées sur un module Atomics. Contrairement à d'autres objets globaux, Atomics n'est pas un constructeur. Atomics ne peut pas être utilisé avec un nouvel opérateur ou peut être appelé en tant que fonction.

Opérations atomiques

Les opérations atomiques sont ininterrompues.

Lorsque la mémoire est partagée, plusieurs threads peuvent lire ou écrire des données existantes dans la mémoire. Donc, si des données sont modifiées, il y aura une perte de données. Les opérations atomiques s'assurent que les valeurs prédites (données) sont écrites et lues avec précision. Les opérations atomiques ne démarreront pas tant que l'opération en cours ne sera pas terminée, il n'y a donc aucun moyen de modifier une donnée existante.

Exemple

Voici le code démontrant l'utilisation de JavaScript Atomics Operation -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.add(arr, 0, 2)</p>
      <p>Atomics.load(arr, 0)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;
            container.innerHTML = Atomics.add(arr, 0, 2) + '<br/>' + Atomics.load(arr, 0);
         }
      </script>
   </body>
</html>

Production

Vérifiez le résultat.

Atomique

L'Atomics est un objet en JavaScript qui fournit des opérations atomiques à effectuer en tant que méthodes statiques. Tout comme les méthodes de l'objet Math, les méthodes et les propriétés d'Atomics sont également statiques. Atomics sont utilisés avec les objets SharedArrayBuffer.

Les opérations Atomic sont installées sur un module Atomics. Contrairement à d'autres objets globaux, Atomics n'est pas un constructeur. Atomics ne peut pas être utilisé avec un nouvel opérateur ou peut être appelé en tant que fonction.

Opérations atomiques

Les opérations atomiques sont ininterrompues.

Lorsque la mémoire est partagée, plusieurs threads peuvent lire ou écrire des données existantes dans la mémoire. Donc, si des données sont modifiées, il y aura une perte de données. Les opérations atomiques s'assurent que les valeurs prédites (données) sont écrites et lues avec précision. Les opérations atomiques ne démarreront pas tant que l'opération en cours ne sera pas terminée, il n'y a donc aucun moyen de modifier une donnée existante.

Exemple

Voici le code démontrant l'utilisation de JavaScript Atomics Operation -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.add(arr, 0, 2)</p>
      <p>Atomics.load(arr, 0)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;
            container.innerHTML = Atomics.add(arr, 0, 2) + '<br/>' + Atomics.load(arr, 0);
         }
      </script>
   </body>
</html>

Production

Vérifiez le résultat.

addajoute une valeur fournie à une position donnée dans le tableau. Il renvoie l'ancienne valeur à cette position. Cette opération atomique garantit qu'aucune autre écriture ne peut avoir lieu tant que la valeur modifiée n'est pas réécrite.

Syntaxe

Atomics.add(typedArray, index, value)

Paramètres

  • typedArray est le tableau typé entier.

  • index est la position dans le tableau de types.

  • value être ajouté.

Revenir

Renvoie l'ancienne valeur à une position donnée.

Des exceptions

  • TypeError dans le cas où le tableau passé n'est pas un tableau de type entier.

  • RangeError si l'index passé est hors limite dans le tableau typé.

Exemple

Voici le code pour implémenter JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.add(arr, 0, 2)</p>
      <p>Atomics.load(arr, 0)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;
            container.innerHTML = Atomics.add(arr, 0, 2) + '<br/>' + Atomics.load(arr, 0);
         }
      </script>
   </body>
</html>

Production

Vérifiez le résultat.

andcalcule le ET au niveau du bit avec une valeur fournie à une position donnée dans le tableau. Il renvoie l'ancienne valeur à cette position. Cette opération atomique garantit qu'aucune autre écriture ne peut avoir lieu tant que la valeur modifiée n'est pas réécrite.

Syntaxe

Atomics.and(typedArray, index, value)

Paramètres

  • typedArray est le tableau typé entier.

  • index est la position dans le tableau de types.

  • value avec quel ET au niveau du bit à calculer.

Revenir

Renvoie l'ancienne valeur à une position donnée.

Des exceptions

  • TypeError dans le cas où le tableau passé n'est pas un tableau de type entier.

  • RangeError si l'index passé est hors limite dans le tableau typé.

Exemple

Voici le code pour implémenter JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.and(arr, 0, 2)</p>
      <p>Atomics.load(arr, 0)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;
            //6 & 2 = 110 & 010 = 010 = 2
            container.innerHTML = Atomics.and(arr, 0, 2) + '<br/>'+ Atomics.load(arr, 0);
         }
      </script>
   </body>
</html>

Production

Vérifiez le résultat.

compareExchangeLa méthode compare et échange une valeur de remplacement si la valeur donnée n'est pas la même que l'ancienne valeur. Il renvoie l'ancienne valeur à cette position. Cette opération atomique garantit qu'aucune autre écriture ne peut avoir lieu tant que la valeur modifiée n'est pas réécrite.

Syntaxe

Atomics.compareExchange(typedArray, index, expectedValue, replacementValue)

Paramètres

  • typedArray est le tableau typé entier.

  • index est la position dans le tableau de types.

  • expectedValue pour vérifier l'égalité.

  • replacementValue échanger.

Revenir

Renvoie l'ancienne valeur à une position donnée.

Des exceptions

  • TypeError dans le cas où le tableau passé n'est pas un tableau de type entier.

  • RangeError si l'index passé est hors limite dans le tableau typé.

Exemple

Voici le code pour implémenter JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.compareExchange(arr, 0, 6, 2)</p>
      <p>Atomics.load(arr, 0)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;
            container.innerHTML = Atomics.compareExchange(arr, 0, 6, 2) + '<br/>' + Atomics.load(arr, 0);
         }
      </script>
   </body>
</html>

Production

Vérifiez le résultat.

exchangeLa méthode échange une valeur donnée à une position donnée d'un tableau. Il renvoie l'ancienne valeur à cette position. Cette opération atomique garantit qu'aucune autre écriture ne peut avoir lieu tant que la valeur modifiée n'est pas réécrite.

Syntaxe

Atomics.exchange(typedArray, index, value)

Paramètres

  • typedArray est le tableau typé entier.

  • index est la position dans le tableau de types.

  • value échanger.

Revenir

Renvoie l'ancienne valeur à une position donnée.

Des exceptions

  • TypeError dans le cas où le tableau passé n'est pas un tableau de type entier.

  • RangeError si l'index passé est hors limite dans le tableau typé.

Exemple

Voici le code pour implémenter JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.exchange(arr, 0, 2)</p>
      <p>Atomics.load(arr, 0)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;
            container.innerHTML = Atomics.exchange(arr, 0, 2) + '<br/>' + Atomics.load(arr, 0);
         }
      </script>
   </body>
</html>

Production

Vérifiez le résultat.

isLockFreeest utilisée pour déterminer si les verrous doivent être utilisés ou non pour les opérations atomiques. Si la taille donnée est l'une des propriétés TypedArray.BYTES_PER_ELEMENT des types entiers TypedArray, elle renvoie true. TypedArray.BYTES_PER_ELEMENT représente la taille en octets de chaque élément d'un tableau typé.

Syntaxe

Atomics.isLockFree(size)

Paramètres

  • size à archiver en octets.

Revenir

Renvoie true si l'opération est sans verrouillage comme false.

Exemple

Voici le code pour implémenter JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.isLockFree(1)</p>
      <p>Atomics.isLockFree(3)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;
            // Int8Array.BYTES_PER_ELEMENT = 1
            container.innerHTML = Atomics.isLockFree(Int8Array.BYTES_PER_ELEMENT) + '<br/>' + Atomics.isLockFree(3);
         }
      </script>
   </body>
</html>

Production

Vérifiez le résultat.

load La méthode renvoie une valeur à une position donnée dans le tableau.

Syntaxe

Atomics.load(typedArray, index)

Paramètres

  • typedArray est le tableau typé entier.

  • index est la position dans le tableau de types.

Revenir

Renvoie la valeur à une position donnée.

Des exceptions

  • TypeError dans le cas où le tableau passé n'est pas un tableau de type entier.

  • RangeError si l'index passé est hors limite dans le tableau typé.

Exemple

Voici le code pour implémenter JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.add(arr, 0, 2)</p>
      <p>Atomics.load(arr, 0)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;
            container.innerHTML = Atomics.add(arr, 0, 2) + '<br/>' + Atomics.load(arr, 0);
         }
      </script>
   </body>
</html>

Production

Vérifiez le résultat.

notifyLa méthode avertit l'agent en attente de se réveiller. notifier ne peut fonctionner qu'avec Int32Array créé à l'aide de SharedArrayBuffer. Il renvoie 0 en cas d'utilisation d'un objet ArrayBuffer non partagé.

Syntaxe

Atomics.notify(typedArray, index, count)

Paramètres

  • typedArray est un Int32Array partagé.

  • index est la position sur laquelle se réveiller dans le tableau de types.

  • count est le nombre d'agents dormants à notifier.

Revenir

Renvoie le nombre d'agents réveillés.

Des exceptions

  • TypeError dans le cas où le tableau passé n'est pas un tableau de type entier.

  • RangeError si l'index passé est hors limite dans le tableau typé.

Exemple

Voici le code pour implémenter JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.store(arr, 0, 5)</p>
      <p>Atomics.notify(arr, 0, 1)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(16);
            var arr = new Int32Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;            
            container.innerHTML = Atomics.store(arr, 0, 5) + '<br>' + Atomics.notify(arr, 0, 1);
         }
      </script>
   </body>
</html>

Production

Vérifiez le résultat.

orcalcule le OU au niveau du bit avec une valeur fournie à une position donnée dans le tableau. Il renvoie l'ancienne valeur à cette position. Cette opération atomique garantit qu'aucune autre écriture ne peut avoir lieu tant que la valeur modifiée n'est pas réécrite.

Syntaxe

Atomics.or(typedArray, index, value)

Paramètres

  • typedArray est le tableau typé entier.

  • index est la position dans le tableau de types.

  • value avec quel OU au niveau du bit à calculer.

Revenir

Renvoie l'ancienne valeur à une position donnée.

Des exceptions

  • TypeError dans le cas où le tableau passé n'est pas un tableau de type entier.

  • RangeError si l'index passé est hors limite dans le tableau typé.

Exemple

Voici le code pour implémenter JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.or(arr, 0, 2)</p>
      <p>Atomics.load(arr, 0)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;
            //6 | 2 = 110 | 010 = 110 = 6
            container.innerHTML = Atomics.or(arr, 0, 2) + '<br/>' + Atomics.load(arr, 0);
         }
      </script>
   </body>
</html>

Production

Vérifiez le résultat.

storeLa méthode stocke une valeur à l'emplacement fourni dans un tableau et la renvoie. Cette opération atomique garantit qu'aucune autre écriture ne peut avoir lieu tant que la valeur modifiée n'est pas réécrite.

Syntaxe

Atomics.store(typedArray, index, value)

Paramètres

  • typedArray est le tableau typé entier.

  • index est la position dans le tableau de types où la valeur à stocker.

  • value à stocker.

Revenir

Renvoie la valeur stockée à une position donnée.

Des exceptions

  • TypeError dans le cas où le tableau passé n'est pas un tableau de type entier.

  • RangeError si l'index passé est hors limite dans le tableau typé.

Exemple

Voici le code pour implémenter JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.store(arr, 0, 2)</p>
      <p>Atomics.load(arr, 0)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;           
            container.innerHTML = Atomics.store(arr, 0, 2) + '<br/>'
            + Atomics.load(arr, 0);
         }
      </script>
   </body>
</html>

Production

Vérifiez le résultat.

subLa méthode soustrait une valeur fournie à une position donnée dans le tableau. Il renvoie l'ancienne valeur à cette position. Cette opération atomique garantit qu'aucune autre écriture ne peut avoir lieu tant que la valeur modifiée n'est pas réécrite.

Syntaxe

Atomics.sub(typedArray, index, value)

Paramètres

  • typedArray est le tableau typé entier.

  • index est la position dans le tableau de types.

  • value à soustraire.

Revenir

Renvoie l'ancienne valeur à une position donnée.

Des exceptions

  • TypeError dans le cas où le tableau passé n'est pas un tableau de type entier.

  • RangeError si l'index passé est hors limite dans le tableau typé.

Exemple

Voici le code pour implémenter JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.sub(arr, 0, 2)</p>
      <p>Atomics.load(arr, 0)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;
            //6 - 2 = 4
            container.innerHTML = Atomics.sub(arr, 0, 2) + '<br/>' + Atomics.load(arr, 0);
         }
      </script>
   </body>
</html>

Production

Vérifiez le résultat.

xorcalcule le XOR au niveau du bit avec une valeur fournie à une position donnée dans le tableau. Il renvoie l'ancienne valeur à cette position. Cette opération atomique garantit qu'aucune autre écriture ne peut avoir lieu tant que la valeur modifiée n'est pas réécrite.

Syntaxe

Atomics.xor(typedArray, index, value)

Paramètres

  • typedArray est le tableau typé entier.

  • index est la position dans le tableau de types.

  • value avec quel XOR au niveau du bit à calculer.

Revenir

Renvoie l'ancienne valeur à une position donnée.

Des exceptions

  • TypeError dans le cas où le tableau passé n'est pas un tableau de type entier.

  • RangeError si l'index passé est hors limite dans le tableau typé.

Exemple

Voici le code pour implémenter JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.xor(arr, 0, 2)</p>
      <p>Atomics.load(arr, 0)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;
            //6 xor 2 = 110 xor 010 = 100 = 4
            container.innerHTML = Atomics.xor(arr, 0, 2) + '<br/>' + Atomics.load(arr, 0);
         }
      </script>
   </body>
</html>

Production

Vérifiez le résultat.