[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Atomics/pause [Back]  [Original]

Atomics.pause() - JavaScript | MDN

Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.

View in English Always switch to English

Atomics.pause()

Baseline 2025
Neu verfgbar

Seit April 2025 funktioniert diese Funktion auf aktuellen Gerten und in aktuellen Browserversionen. Auf lteren Gerten oder in lteren Browsern funktioniert sie mglicherweise nicht.

Die statische Methode Atomics.pause() stellt eine Mikro-Warte-Primitiv zur Verfgung, die der CPU andeutet, dass der Aufrufer auf den Zugriff auf eine gemeinsam genutzte Ressource wartet. Dadurch kann das System die zugewiesenen Ressourcen fr den Kern (wie Leistung) oder Thread reduzieren, ohne den aktuellen Thread abzugeben.

pause() hat kein beobachtbares Verhalten auer der zeitlichen Wirkung. Das genaue Verhalten hngt von der CPU-Architektur und dem Betriebssystem ab. Zum Beispiel kann es auf Intel x86 eine pause-Anweisung gem Intels Optimierungs-Handbuch sein. Auf manchen Plattformen knnte es ein no-op sein.

In diesem Artikel

Syntax

js
Atomics.pause()

Parameter

Keine.

Rckgabewert

Keiner (undefined).

Beispiele

Beachten Sie, dass diese Beispiele nicht direkt in der Konsole oder einer beliebigen Webseite ausgefhrt werden knnen, da SharedArrayBuffer nicht definiert ist, es sei denn, seine Sicherheitsanforderungen sind erfllt.

Verwendung von Atomics.pause()

Der Aufruf von Atomics.wait() oder Atomics.waitAsync(), um auf den Zugriff auf geteilten Speicher zu warten, bewirkt, dass der Thread aus dem Kern herausgeplant wird und dann nach der Wartezeit wieder herein, was whrend Zeiten hoher Konkurrenz effizient ist, in denen der Zugriff auf den geteilten Speicher einige Zeit in Anspruch nehmen knnte. Wenn die Konkurrenz gering ist, ist es oft effizienter, die Sperre abzufragen, ohne den Thread abzugeben: Dieser Ansatz wird als Busy Waiting oder Spinlocking bezeichnet. Die Methode pause() ermglicht es Ihnen, effizienter whrend des Wartens zu Spinlocken, indem sie der CPU einen Hinweis gibt, was der Thread tut, und dadurch sein geringes Ressourcenbedrfnis anzeigt.

Um beiden Bedingungen gerecht zu werden, besteht ein gngiger Ansatz darin, zuerst zu Spinlocken, in der Hoffnung, dass die Konkurrenz gering ist, und dann zu warten, wenn die Sperre nicht nach kurzer Zeit erlangt wird. Wenn wir die Sperre bereits durch Spinlocking erlangt haben, wird der wait()-Aufruf ein no-op sein.

Das folgende Beispiel zeigt, wie dieser Ansatz mit Atomics.pause() und Atomics.wait() verwendet werden kann.

Warnung: Die Verwendung von Spinlocking auf dem Hauptthread wird nicht empfohlen, da dadurch die gesamte Seite einfriert. Allgemein gilt, dass Spinlocks, sofern sie nicht sehr sorgfltig entworfen werden, mglicherweise nicht tatschlich leistungsfhiger sind als ein regulres Warten.

js
// Imagine another thread also has access to this shared memory
const sab = new SharedArrayBuffer(1024);
const i32 = new Int32Array(sab);

// Fast path: spin the CPU for a short while
let spin = 0;
do {
  if (Atomics.compareExchange(i32, 0, 0, 1) === 0) {
    break;
  }
  Atomics.pause();
  spin++;
} while (spin < 10);

// Slow path: wait for the lock
// This can only be called in a worker thread,
// because the main thread cannot be blocked
Atomics.wait(i32, 0, 1);

Spezifikationen

Spezifikation
Atomics.pause
# Atomics.pause

Browser-Kompatibilitt

Siehe auch


Web Proxy Viewer  |  New URL  |  Original Page