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.