Atomics - Guida rapida
Atomics
Atomics è un oggetto in JavaScript che fornisce operazioni atomiche da eseguire come metodi statici. Proprio come i metodi dell'oggetto Math, anche i metodi e le proprietà di Atomics sono statici. Gli atomici vengono utilizzati con gli oggetti SharedArrayBuffer.
Le operazioni Atomic sono installate su un Atomics Module. A differenza di altri oggetti globali, Atomics non è un costruttore. Atomics non può essere utilizzato con un nuovo operatore o può essere richiamato come funzione.
Operazioni atomiche
Le operazioni atomiche sono ininterrotte.
Quando la memoria è condivisa, più thread possono leggere o scrivere dati esistenti nella memoria. Quindi, se i dati vengono modificati, ci sarà una perdita di dati Le operazioni atomiche assicurano che i valori previsti (dati) siano scritti e letti accuratamente. Le operazioni atomiche non verranno avviate fino a quando e a meno che l'operazione corrente non sia terminata, quindi non è possibile modificare i dati esistenti.
Esempio
Di seguito è riportato il codice che dimostra l'uso di 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>
Produzione
Verifica il risultato.
Atomics
Atomics è un oggetto in JavaScript che fornisce operazioni atomiche da eseguire come metodi statici. Proprio come i metodi dell'oggetto Math, anche i metodi e le proprietà di Atomics sono statici. Gli atomici vengono utilizzati con gli oggetti SharedArrayBuffer.
Le operazioni Atomic sono installate su un Atomics Module. A differenza di altri oggetti globali, Atomics non è un costruttore. Atomics non può essere utilizzato con un nuovo operatore o può essere richiamato come funzione.
Operazioni atomiche
Le operazioni atomiche sono ininterrotte.
Quando la memoria è condivisa, più thread possono leggere o scrivere dati esistenti nella memoria. Quindi, se i dati vengono modificati, ci sarà una perdita di dati Le operazioni atomiche assicurano che i valori previsti (dati) siano scritti e letti accuratamente. Le operazioni atomiche non verranno avviate fino a quando e a meno che l'operazione corrente non sia terminata, quindi non è possibile modificare i dati esistenti.
Esempio
Di seguito è riportato il codice che dimostra l'uso di 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>
Produzione
Verifica il risultato.
addmetodo aggiunge un valore fornito in una data posizione nell'array. Restituisce il vecchio valore in quella posizione. Questa operazione atomica garantisce che nessun'altra scrittura possa avvenire fino a quando il valore modificato non viene riscritto.
Sintassi
Atomics.add(typedArray, index, value)
Parametri
typedArray è l'array intero digitato.
index è la posizione in typedarray.
value essere aggiunto.
Ritorno
Restituisce il vecchio valore in una data posizione.
Eccezioni
TypeError nel caso in cui l'array passato non sia un array di tipo intero.
RangeError se l'indice passato è fuori limite nell'array digitato.
Esempio
Di seguito è riportato il codice per l'implementazione di 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>
Produzione
Verifica il risultato.
andIl metodo calcola l'AND bit per bit con un valore fornito in una data posizione nell'array. Restituisce il vecchio valore in quella posizione. Questa operazione atomica garantisce che nessun'altra scrittura possa avvenire fino a quando il valore modificato non viene riscritto.
Sintassi
Atomics.and(typedArray, index, value)
Parametri
typedArray è l'array intero digitato.
index è la posizione in typedarray.
value con cui calcolare AND bit per bit.
Ritorno
Restituisce il vecchio valore in una data posizione.
Eccezioni
TypeError nel caso in cui l'array passato non sia un array di tipo intero.
RangeError se l'indice passato è fuori limite nell'array digitato.
Esempio
Di seguito è riportato il codice per l'implementazione di 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>
Produzione
Verifica il risultato.
compareExchangemetodo confronta e scambia un valore di sostituzione se il valore dato non è uguale al vecchio valore. Restituisce il vecchio valore in quella posizione. Questa operazione atomica garantisce che nessun'altra scrittura possa avvenire fino a quando il valore modificato non viene riscritto.
Sintassi
Atomics.compareExchange(typedArray, index, expectedValue, replacementValue)
Parametri
typedArray è l'array intero digitato.
index è la posizione in typedarray.
expectedValue per verificare l'uguaglianza.
replacementValue scambiare.
Ritorno
Restituisce il vecchio valore in una data posizione.
Eccezioni
TypeError nel caso in cui l'array passato non sia un array di tipo intero.
RangeError se l'indice passato è fuori limite nell'array digitato.
Esempio
Di seguito è riportato il codice per l'implementazione di 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>
Produzione
Verifica il risultato.
exchangemetodo scambia un dato valore in una data posizione di un array. Restituisce il vecchio valore in quella posizione. Questa operazione atomica garantisce che nessun'altra scrittura possa avvenire fino a quando il valore modificato non viene riscritto.
Sintassi
Atomics.exchange(typedArray, index, value)
Parametri
typedArray è l'array intero digitato.
index è la posizione in typedarray.
value scambiare.
Ritorno
Restituisce il vecchio valore in una data posizione.
Eccezioni
TypeError nel caso in cui l'array passato non sia un array di tipo intero.
RangeError se l'indice passato è fuori limite nell'array digitato.
Esempio
Di seguito è riportato il codice per l'implementazione di 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>
Produzione
Verifica il risultato.
isLockFreeviene utilizzato per determinare se i blocchi devono essere utilizzati o meno per le operazioni atomiche. Se la dimensione specificata è una delle proprietà TypedArray.BYTES_PER_ELEMENT dei tipi TypedArray interi, restituisce true. TypedArray.BYTES_PER_ELEMENT rappresenta la dimensione in byte di ogni elemento di un array tipizzato.
Sintassi
Atomics.isLockFree(size)
Parametri
size da archiviare in byte.
Ritorno
Restituisce true se l'operazione è priva di blocchi come false.
Esempio
Di seguito è riportato il codice per l'implementazione di 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>
Produzione
Verifica il risultato.
load restituisce un valore in una data posizione nell'array.
Sintassi
Atomics.load(typedArray, index)
Parametri
typedArray è l'array intero digitato.
index è la posizione in typedarray.
Ritorno
Restituisce il valore in una determinata posizione.
Eccezioni
TypeError nel caso in cui l'array passato non sia un array di tipo intero.
RangeError se l'indice passato è fuori limite nell'array digitato.
Esempio
Di seguito è riportato il codice per l'implementazione di 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>
Produzione
Verifica il risultato.
notifyil metodo notifica all'agente in attesa di svegliarsi. Il metodo notify può funzionare solo con Int32Array creato utilizzando SharedArrayBuffer. Restituisce 0 in caso di utilizzo di un oggetto ArrayBuffer non condiviso.
Sintassi
Atomics.notify(typedArray, index, count)
Parametri
typedArray è un Int32Array condiviso.
index è la posizione nel typedarray su cui svegliarsi.
count è il numero di agenti inattivi da notificare.
Ritorno
Restituisce il numero di agenti svegliati.
Eccezioni
TypeError nel caso in cui l'array passato non sia un array di tipo intero.
RangeError se l'indice passato è fuori limite nell'array digitato.
Esempio
Di seguito è riportato il codice per l'implementazione di 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>
Produzione
Verifica il risultato.
ormetodo calcola l'OR bit per bit con un valore fornito in una data posizione nella matrice. Restituisce il vecchio valore in quella posizione. Questa operazione atomica garantisce che nessun'altra scrittura possa avvenire fino a quando il valore modificato non viene riscritto.
Sintassi
Atomics.or(typedArray, index, value)
Parametri
typedArray è l'array intero digitato.
index è la posizione in typedarray.
value con cui calcolare l'OR bit per bit.
Ritorno
Restituisce il vecchio valore in una data posizione.
Eccezioni
TypeError nel caso in cui l'array passato non sia un array di tipo intero.
RangeError se l'indice passato è fuori limite nell'array digitato.
Esempio
Di seguito è riportato il codice per l'implementazione di 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>
Produzione
Verifica il risultato.
storememorizza un valore nella posizione fornita in un array e restituisce lo stesso. Questa operazione atomica garantisce che nessun'altra scrittura possa avvenire fino a quando il valore modificato non viene riscritto.
Sintassi
Atomics.store(typedArray, index, value)
Parametri
typedArray è l'array intero digitato.
index è la posizione in typedarray dove il valore deve essere memorizzato.
value da conservare.
Ritorno
Restituisce il valore memorizzato in una determinata posizione.
Eccezioni
TypeError nel caso in cui l'array passato non sia un array di tipo intero.
RangeError se l'indice passato è fuori limite nell'array digitato.
Esempio
Di seguito è riportato il codice per l'implementazione di 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>
Produzione
Verifica il risultato.
submetodo sottrae un valore fornito in una data posizione nella matrice. Restituisce il vecchio valore in quella posizione. Questa operazione atomica garantisce che nessun'altra scrittura possa avvenire fino a quando il valore modificato non viene riscritto.
Sintassi
Atomics.sub(typedArray, index, value)
Parametri
typedArray è l'array intero digitato.
index è la posizione in typedarray.
value da sottrarre.
Ritorno
Restituisce il vecchio valore in una data posizione.
Eccezioni
TypeError nel caso in cui l'array passato non sia un array di tipo intero.
RangeError se l'indice passato è fuori limite nell'array digitato.
Esempio
Di seguito è riportato il codice per l'implementazione di 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>
Produzione
Verifica il risultato.
xorIl metodo calcola lo XOR bit per bit con un valore fornito in una data posizione nell'array. Restituisce il vecchio valore in quella posizione. Questa operazione atomica garantisce che nessun'altra scrittura possa avvenire fino a quando il valore modificato non viene riscritto.
Sintassi
Atomics.xor(typedArray, index, value)
Parametri
typedArray è l'array intero digitato.
index è la posizione in typedarray.
value con cui calcolare XOR bit per bit.
Ritorno
Restituisce il vecchio valore in una data posizione.
Eccezioni
TypeError nel caso in cui l'array passato non sia un array di tipo intero.
RangeError se l'indice passato è fuori limite nell'array digitato.
Esempio
Di seguito è riportato il codice per l'implementazione di 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>
Produzione
Verifica il risultato.