diff options
Diffstat (limited to 'files/it/web/javascript/reference/global_objects/atomics/index.html')
| -rw-r--r-- | files/it/web/javascript/reference/global_objects/atomics/index.html | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/files/it/web/javascript/reference/global_objects/atomics/index.html b/files/it/web/javascript/reference/global_objects/atomics/index.html new file mode 100644 index 0000000000..56c3ed5ecc --- /dev/null +++ b/files/it/web/javascript/reference/global_objects/atomics/index.html @@ -0,0 +1,166 @@ +--- +title: Atomics +slug: Web/JavaScript/Reference/Global_Objects/Atomics +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics +--- +<div>{{JSRef}}</div> + +<p>L' oggetto <strong><code>Atomics</code></strong> fornisce operazioni atomiche come metodi statici. Sono utilizzati con gli oggetti {{jsxref("SharedArrayBuffer")}}.</p> + +<p>Le operazioni atomiche sono implementate nel modulo <code>Atomics</code>. Diversamente dagli altri oggetti global, <code>Atomics</code> non è un constructor. Non è, quindi, possibile utilizzarlo con <a href="/en-US/docs/Web/JavaScript/Reference/Operators/new"><code>new</code> operator</a> o invocare l'oggetto <code>Atomics</code> come una funzione. Tutte le proprietà ed i metodi di <code>Atomics</code> sono statici (come per esempio nel caso dell'oggetto {{jsxref("Math")}}).</p> + +<h2 id="Propertà">Propertà</h2> + +<dl> + <dt><code>Atomics[Symbol.toStringTag]</code></dt> + <dd>Il valore di questa proprietà è "Atomics".</dd> +</dl> + +<h2 id="Metodi">Metodi</h2> + +<h3 id="Operazioni_Atomiche">Operazioni Atomiche</h3> + +<p>Quando la memoria è condivisa, molti thread possono leggere e scrivere gli stessi dati in memoria. Le operazioni atomiche fanno in modo che: siano scritti e letti valori predicibili, che ciscuna operazione termini prima che la successiva abbia inizio e che ciascuna operazione non sia interrotta.</p> + +<dl> + <dt>{{jsxref("Atomics.add()")}}</dt> + <dd>Aggiunge un determinato valore in una determinata posizione dell'array. Restituisce il vecchio valore che occupava la medesima posizione nell'array.</dd> + <dt>{{jsxref("Atomics.and()")}}</dt> + <dd>Calcola un "bitwise AND" in una determinata posizione dell'array. Restituisce il vecchio valore che occupava la medesima posizione nell'array.</dd> + <dt>{{jsxref("Atomics.compareExchange()")}}</dt> + <dd>Memorizza un dato valore in una posizione dell'array, se questo valore è uguale ad un altro determinato valore. Restituisce il vecchio valore che occupava la medesima posizione nell'array.</dd> + <dt>{{jsxref("Atomics.exchange()")}}</dt> + <dd>Memorizza un dato valore in una determinata posizione nell'array. Restituisce il vecchio valore che occupava la medesima posizione nell'array.</dd> +</dl> + +<dl> + <dt>{{jsxref("Atomics.load()")}}</dt> + <dd>Restituisce il valore di una determinata posizione nell'array.</dd> + <dt>{{jsxref("Atomics.or()")}}</dt> + <dd>Calcola un "bitwise OR" in una determinata posizione dell'array. Restituisce il vecchio valore che occupava la medesima posizione nell'array.</dd> + <dt>{{jsxref("Atomics.store()")}}</dt> + <dd>Memorizza un dato valore in una determinata posizione dell'array. Restituisce lo stesso valore momorizzato.</dd> + <dt>{{jsxref("Atomics.sub()")}}</dt> + <dd>Sottrae un determinato valore ad una data posizione dell'array. Restituisce il vecchio valore che occupava la medesima posizione nell'array.</dd> + <dt>{{jsxref("Atomics.xor()")}}</dt> + <dd>Calcola un "bitwise XOR" in una determinata posizione dell'array. Restituisce il vecchio valore che occupava la medesima posizione nell'array.</dd> +</dl> + +<h3 id="Wait_and_wake">Wait and wake</h3> + +<p>I metodi <code>wait()</code> e <code>wake() </code>sono modellati sul futexes ("fast user-space mutex") di Linux e forniscono metodi di attesa finchè una certa condizione non diventa vera e sono tipicamente utilizzati in costrutti bloccanti.</p> + +<dl> + <dt>{{jsxref("Atomics.wait()")}}</dt> + <dd> + <p>Verifica che una certa posizione dell'array continui a contenere un determinato valore e si mette in attesa o va in time-out. Restituisce i valori <code>"ok"</code>, <code>"not-equal"</code>, oppure <code>"timed-out"</code>. Se l'attesa non è consentita dall'agente che effettua la chiamata, allora il metodo innesca una "Error Exception" (molti browsers non consentiranno <code>wait()</code> nel loro thread principale)</p> + </dd> + <dt>{{jsxref("Atomics.wake()")}}</dt> + <dd>"Sveglia" gli agenti dormienti nella coda di wait in una determinata posizione dell'array. Restituisce il numero degli agenti "svegliati".</dd> + <dt>{{jsxref("Atomics.isLockFree()", "Atomics.isLockFree(size)")}}</dt> + <dd> + <p>Un primitiva di ottimizzazione che può essere utilizzata per determinare quando utilizzare "lock" o operazioni atomiche. Restituisce <code>true</code>, se un operazione atomica su un array di una data dimensione può essere implementata utilizzando operazioni atomiche hardware (invece del "lock"). Solo per esperti.</p> + </dd> +</dl> + +<h2 id="Specifiche">Specifiche</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Specifiche</th> + <th scope="col">Status</th> + <th scope="col">Commenti</th> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-atomics-object', 'Atomics')}}</td> + <td>{{Spec2('ESDraft')}}</td> + <td>Definizione Iniziale in ES2017.</td> + </tr> + <tr> + <td>{{SpecName('ES8', '#sec-atomics-object', 'Atomics')}}</td> + <td>{{Spec2('ES8')}}</td> + <td> </td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilità_con_i_Browser">Compatibilità con i Browser</h2> + +<p>{{CompatibilityTable}}</p> + +<div id="compat-desktop"> +<table class="compat-table"> + <tbody> + <tr> + <th>Feature</th> + <th>Chrome</th> + <th>Firefox (Gecko)</th> + <th>Internet Explorer</th> + <th>Opera</th> + <th>Safari</th> + </tr> + <tr> + <td>Basic support</td> + <td>{{CompatNo}} [2]</td> + <td>{{CompatGeckoDesktop("55")}} [1]</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + </tr> + </tbody> +</table> +</div> + +<div id="compat-mobile"> +<table class="compat-table"> + <tbody> + <tr> + <th>Feature</th> + <th>Android</th> + <th>Chrome for Android</th> + <th>Firefox Mobile (Gecko)</th> + <th>IE Mobile</th> + <th>Opera Mobile</th> + <th>Safari Mobile</th> + </tr> + <tr> + <td>Basic support</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatGeckoMobile("55")}} [1]</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + </tr> + </tbody> +</table> +</div> + +<p>[1] In Firefox, dalla versione 46 alla versione 54 questa feature è disabilitata da una configurazione avenzata. In about:config, configurare <code>javascript.options.shared_memory</code> a <code>true</code>. </p> + +<p>[2] L' implementazione è in via di sviluppo e richiede i flag di runtime: <code>--js-flags=--harmony-sharedarraybuffer --enable-blink-feature=SharedArrayBuffer</code></p> + +<h2 id="Note_di_Compatibilità">Note di Compatibilità</h2> + +<p>Prima di SpiderMonkey 48 {{geckoRelease(48)}}, i nomi e le semantiche delle API non erano ancora state implementate. Le modifiche tra la versione 46 e la versione 48 di Firefox, sono:</p> + +<ul> + <li>I metodi <code>Atomics.futexWakeOrRequeue()</code> e <code>Atomics.fence()</code> sono stati completamente rimossi ({{bug(1259544)}} e {{bug(1225028)}}).</li> + <li>I metodi {{jsxref("Atomics.wait()")}} e {{jsxref("Atomics.wake()")}} sono sati chiamati <code>Atomics.futexWait()</code> e <code>Atomics.futexWake()</code> ({{bug(1260910)}}). Nota: I vecchi nomi sono stati rimossi nella versione 49 e successive ({{bug(1262062)}}).</li> + <li>Le proprietà <code>Atomics.OK</code>, <code>Atomics.TIMEDOUT</code>, <code>Atomics.NOTEQUAL</code> sono state rimosse. Il metodo {{jsxref("Atomics.wait()")}} adesso restituisce le stringhe "ok", "timed-out" e "not-equal" ({{bug(1260835)}}).</li> + <li> + <p>Il parametro <code>count</code> del metodo {{jsxref("Atomics.wake()")}} è stato cambiato: il valore di default adesso è <code>+Infinity</code>, e non <code>0</code> ({{bug(1253350)}}).</p> + </li> +</ul> + +<h2 id="Vedi_anche">Vedi anche</h2> + +<ul> + <li>{{jsxref("ArrayBuffer")}}</li> + <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays">JavaScript typed arrays</a></li> + <li><a href="/en-US/docs/Web/API/Web_Workers_API">Web Workers</a></li> + <li><a href="https://github.com/lars-t-hansen/parlib-simple">parlib-simple </a>– a simple library providing synchronization and work distribution abstractions.</li> + <li><a href="https://github.com/tc39/ecmascript_sharedmem/blob/master/TUTORIAL.md">Shared Memory – a brief tutorial</a></li> + <li><a href="https://hacks.mozilla.org/2016/05/a-taste-of-javascripts-new-parallel-primitives/">A Taste of JavaScript’s New Parallel Primitives – Mozilla Hacks</a></li> +</ul> |
