Atomics - Panduan Cepat

Atomics

Atomics adalah objek dalam JavaScript yang menyediakan operasi atomik untuk dilakukan sebagai metode statis. Sama seperti metode objek Matematika, metode dan properti Atom juga bersifat statis. Atomics digunakan dengan objek SharedArrayBuffer.

Operasi Atom diinstal pada Modul Atom. Tidak seperti objek global lainnya, Atomics bukanlah konstruktor. Atomics tidak dapat digunakan dengan operator baru atau dapat dipanggil sebagai suatu fungsi.

Operasi Atom

Operasi atom tidak dapat terputus.

Saat memori digunakan bersama, beberapa utas dapat membaca atau menulis data yang ada dalam memori. Jadi jika ada data yang diubah, akan ada kehilangan data. Operasi atom memastikan bahwa nilai prediksi (data) ditulis dan dibaca dengan akurat. Operasi atom tidak akan dimulai hingga dan kecuali operasi saat ini selesai, jadi tidak ada cara untuk mengubah data yang ada.

Contoh

Berikut adalah kode yang mendemonstrasikan penggunaan 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>

Keluaran

Verifikasi hasilnya.

Atomics

Atomics adalah objek dalam JavaScript yang menyediakan operasi atomik untuk dilakukan sebagai metode statis. Sama seperti metode objek Matematika, metode dan properti Atom juga bersifat statis. Atomics digunakan dengan objek SharedArrayBuffer.

Operasi Atom diinstal pada Modul Atom. Tidak seperti objek global lainnya, Atomics bukanlah konstruktor. Atomics tidak dapat digunakan dengan operator baru atau dapat dipanggil sebagai suatu fungsi.

Operasi Atom

Operasi atom tidak dapat terputus.

Saat memori digunakan bersama, beberapa utas dapat membaca atau menulis data yang ada dalam memori. Jadi jika ada data yang diubah, akan ada kehilangan data. Operasi atom memastikan bahwa nilai prediksi (data) ditulis dan dibaca dengan akurat. Operasi atom tidak akan dimulai hingga dan kecuali operasi saat ini selesai, jadi tidak ada cara untuk mengubah data yang ada.

Contoh

Berikut adalah kode yang mendemonstrasikan penggunaan 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>

Keluaran

Verifikasi hasilnya.

addmetode menambahkan nilai yang diberikan pada posisi tertentu dalam array. Ini mengembalikan nilai lama pada posisi itu. Operasi atom ini memastikan bahwa tidak ada penulisan lain yang dapat terjadi hingga nilai yang diubah ditulis kembali.

Sintaksis

Atomics.add(typedArray, index, value)

Parameter

  • typedArray adalah array yang diketik bilangan bulat.

  • index adalah posisi di typedarray.

  • value untuk ditambahkan.

Kembali

Mengembalikan nilai lama pada posisi tertentu.

Pengecualian

  • TypeError dalam hal larik yang dilewatkan bukan larik yang diketik bilangan bulat.

  • RangeError jika indeks lulus keluar dari batas dalam array yang diketik.

Contoh

Berikut adalah kode untuk mengimplementasikan 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>

Keluaran

Verifikasi hasilnya.

andmetode menghitung bitwise AND dengan nilai yang diberikan pada posisi tertentu dalam array. Ini mengembalikan nilai lama pada posisi itu. Operasi atom ini memastikan bahwa tidak ada penulisan lain yang dapat terjadi hingga nilai yang diubah ditulis kembali.

Sintaksis

Atomics.and(typedArray, index, value)

Parameter

  • typedArray adalah array yang diketik bilangan bulat.

  • index adalah posisi di typedarray.

  • value dengan mana bitwise DAN akan dihitung.

Kembali

Mengembalikan nilai lama pada posisi tertentu.

Pengecualian

  • TypeError dalam hal larik yang dilewatkan bukan larik yang diketik bilangan bulat.

  • RangeError jika indeks lulus keluar dari batas dalam array yang diketik.

Contoh

Berikut adalah kode untuk mengimplementasikan 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>

Keluaran

Verifikasi hasilnya.

compareExchangeMetode membandingkan dan menukar nilai pengganti jika nilai yang diberikan tidak sama dengan nilai lama. Ini mengembalikan nilai lama pada posisi itu. Operasi atom ini memastikan bahwa tidak ada penulisan lain yang dapat terjadi hingga nilai yang diubah ditulis kembali.

Sintaksis

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

Parameter

  • typedArray adalah array yang diketik bilangan bulat.

  • index adalah posisi di typedarray.

  • expectedValue untuk memeriksa kesetaraan.

  • replacementValue untuk menukarkan.

Kembali

Mengembalikan nilai lama pada posisi tertentu.

Pengecualian

  • TypeError dalam hal larik yang dilewatkan bukan larik yang diketik bilangan bulat.

  • RangeError jika indeks lulus keluar dari batas dalam array yang diketik.

Contoh

Berikut adalah kode untuk mengimplementasikan 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>

Keluaran

Verifikasi hasilnya.

exchangemetode pertukaran nilai tertentu pada posisi tertentu dari sebuah array. Ini mengembalikan nilai lama pada posisi itu. Operasi atom ini memastikan bahwa tidak ada penulisan lain yang dapat terjadi hingga nilai yang diubah ditulis kembali.

Sintaksis

Atomics.exchange(typedArray, index, value)

Parameter

  • typedArray adalah array yang diketik bilangan bulat.

  • index adalah posisi di typedarray.

  • value untuk menukarkan.

Kembali

Mengembalikan nilai lama pada posisi tertentu.

Pengecualian

  • TypeError dalam hal larik yang dilewatkan bukan larik yang diketik bilangan bulat.

  • RangeError jika indeks lulus keluar dari batas dalam array yang diketik.

Contoh

Berikut adalah kode untuk mengimplementasikan 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>

Keluaran

Verifikasi hasilnya.

isLockFreeMetode digunakan untuk menentukan apakah kunci akan digunakan atau tidak untuk operasi atom. Jika ukuran yang diberikan adalah salah satu dari properti TypedArray.BYTES_PER_ELEMENT jenis integer TypedArray maka itu mengembalikan nilai true. TypedArray.BYTES_PER_ELEMENT mewakili ukuran dalam byte dari setiap elemen dari array yang diketik.

Sintaksis

Atomics.isLockFree(size)

Parameter

  • size untuk diperiksa dalam byte.

Kembali

Mengembalikan nilai benar jika operasi bebas kunci sebagai salah.

Contoh

Berikut adalah kode untuk mengimplementasikan 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>

Keluaran

Verifikasi hasilnya.

load metode mengembalikan nilai pada posisi tertentu dalam array.

Sintaksis

Atomics.load(typedArray, index)

Parameter

  • typedArray adalah array yang diketik bilangan bulat.

  • index adalah posisi di typedarray.

Kembali

Mengembalikan nilai pada posisi tertentu.

Pengecualian

  • TypeError dalam hal larik yang dilewatkan bukan larik yang diketik bilangan bulat.

  • RangeError jika indeks lulus keluar dari batas dalam array yang diketik.

Contoh

Berikut adalah kode untuk mengimplementasikan 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>

Keluaran

Verifikasi hasilnya.

notifymetode memberi tahu agen menunggu untuk bangun. metode notify hanya dapat bekerja dengan Int32Array yang dibuat menggunakan SharedArrayBuffer. Ini mengembalikan 0 jika objek ArrayBuffer yang tidak dibagikan digunakan.

Sintaksis

Atomics.notify(typedArray, index, count)

Parameter

  • typedArray adalah Int32Array bersama.

  • index adalah posisi dalam typedarray untuk bangun.

  • count adalah jumlah agen tidur yang harus diberitahukan.

Kembali

Mengembalikan jumlah agen yang dibangunkan.

Pengecualian

  • TypeError dalam hal larik yang dilewatkan bukan larik yang diketik bilangan bulat.

  • RangeError jika indeks lulus keluar dari batas dalam array yang diketik.

Contoh

Berikut adalah kode untuk mengimplementasikan 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>

Keluaran

Verifikasi hasilnya.

ormetode menghitung bitwise OR dengan nilai yang diberikan pada posisi tertentu dalam array. Ini mengembalikan nilai lama pada posisi itu. Operasi atom ini memastikan bahwa tidak ada penulisan lain yang dapat terjadi hingga nilai yang diubah ditulis kembali.

Sintaksis

Atomics.or(typedArray, index, value)

Parameter

  • typedArray adalah array yang diketik bilangan bulat.

  • index adalah posisi di typedarray.

  • value dengan bitwise OR yang akan dihitung.

Kembali

Mengembalikan nilai lama pada posisi tertentu.

Pengecualian

  • TypeError dalam hal larik yang dilewatkan bukan larik yang diketik bilangan bulat.

  • RangeError jika indeks lulus keluar dari batas dalam array yang diketik.

Contoh

Berikut adalah kode untuk mengimplementasikan 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>

Keluaran

Verifikasi hasilnya.

storemetode menyimpan nilai di lokasi yang disediakan dalam array dan mengembalikan yang sama. Operasi atom ini memastikan bahwa tidak ada penulisan lain yang dapat terjadi hingga nilai yang diubah ditulis kembali.

Sintaksis

Atomics.store(typedArray, index, value)

Parameter

  • typedArray adalah array yang diketik bilangan bulat.

  • index adalah posisi dalam typedarray dimana nilai akan disimpan.

  • value untuk disimpan.

Kembali

Mengembalikan nilai yang disimpan pada posisi tertentu.

Pengecualian

  • TypeError dalam hal larik yang dilewatkan bukan larik yang diketik bilangan bulat.

  • RangeError jika indeks lulus keluar dari batas dalam array yang diketik.

Contoh

Berikut adalah kode untuk mengimplementasikan 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>

Keluaran

Verifikasi hasilnya.

submetode mengurangi nilai yang diberikan pada posisi tertentu dalam array. Ini mengembalikan nilai lama pada posisi itu. Operasi atom ini memastikan bahwa tidak ada penulisan lain yang dapat terjadi hingga nilai yang diubah ditulis kembali.

Sintaksis

Atomics.sub(typedArray, index, value)

Parameter

  • typedArray adalah array yang diketik bilangan bulat.

  • index adalah posisi di typedarray.

  • value untuk dikurangkan.

Kembali

Mengembalikan nilai lama pada posisi tertentu.

Pengecualian

  • TypeError dalam hal larik yang dilewatkan bukan larik yang diketik bilangan bulat.

  • RangeError jika indeks lulus keluar dari batas dalam array yang diketik.

Contoh

Berikut adalah kode untuk mengimplementasikan 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>

Keluaran

Verifikasi hasilnya.

xormetode menghitung XOR bitwise dengan nilai yang diberikan pada posisi tertentu dalam array. Ini mengembalikan nilai lama pada posisi itu. Operasi atom ini memastikan bahwa tidak ada penulisan lain yang dapat terjadi hingga nilai yang diubah ditulis kembali.

Sintaksis

Atomics.xor(typedArray, index, value)

Parameter

  • typedArray adalah array yang diketik bilangan bulat.

  • index adalah posisi di typedarray.

  • value dengan bitwise XOR yang akan dihitung.

Kembali

Mengembalikan nilai lama pada posisi tertentu.

Pengecualian

  • TypeError dalam hal larik yang dilewatkan bukan larik yang diketik bilangan bulat.

  • RangeError jika indeks lulus keluar dari batas dalam array yang diketik.

Contoh

Berikut adalah kode untuk mengimplementasikan 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>

Keluaran

Verifikasi hasilnya.