Baseline 2025
Newly available
Atomics.pause()
ã¯éçã¡ã½ããã§ãå¼ã³åºãå´ãå
±æãªã½ã¼ã¹ã¸ã®ã¢ã¯ã»ã¹ãå¾
æ©ãã¦ããéãCPU ã«ãã®ãã¨ãç¥ããããã¤ã¯ãå¾
æ©ããªããã£ããæä¾ãã¾ããããã«ãããã·ã¹ãã ã¯ãç¾å¨ã®ã¹ã¬ãããå§è²ãããã¨ãªããã³ã¢ï¼é»åãªã©ï¼ã¾ãã¯ã¹ã¬ããã«å²ãå½ã¦ããã¦ãããªã½ã¼ã¹ã縮å°ãããã¨ãã§ãã¾ãã
pause()
ã¯ãã¿ã¤ãã³ã°ä»¥å¤ã®ç£è¦å¯è½ãªåä½ã¯ä¸åããã¾ãããæ£ç¢ºãªåä½ã¯ã CPU ã¢ã¼ããã¯ãã£ããã³ãªãã¬ã¼ãã£ã³ã°ã·ã¹ãã ã«ãã£ã¦ç°ãªãã¾ããä¾ãã°ã Intel x86 ã§ã¯ã Intel ã®æé©åããã¥ã¢ã« ã«ããã¨ã pause
å½ä»¤ã§ããå¯è½æ§ãããã¾ãããã©ãããã©ã¼ã ã«ãã£ã¦ã¯ãä½ãããªãå½ä»¤ã§ããå ´åãããã¾ãã
Atomics.pause()
Atomics.pause(durationHint)
弿°
durationHint
çç¥å¯
å®è£
ãå¾
æ©æéãæ±ºå®ããããã«ä½¿ç¨ã§ããæ´æ°ã§ããå¤ n + 1
ã®å ´åãå®è£
ã¯ãæå®ãããå¤ n
ã¨åãæé以ä¸å¾
æ©ãã¾ãããã®æ°å¤ãã®ãã®ã¯ç©ççãªæå³ã¯ããã¾ãããæ°åããæ°ç¾ããç§ã®ãªã¼ãã¼ã§ã䏿忢ã§ããæé·æéã«å
é¨çãªä¸éãããå ´åãããã¾ããããã¯ã渡ã durationHint
ã大ãããããã¨ã§ãåé¿æ¦ç¥ãå®è£
ããããã«ä½¿ç¨ãããã¨ãã§ãã¾ããå®è£
ããã®ãã³ãã使ç¨ãããã¨ãä¿è¨¼ãããã®ã§ã¯ããã¾ããã
ãªã (undefined
)ã
TypeError
durationHint ãæ´æ°ã¾ã㯠undefined
ã§ãªãå ´åã«çºçãã¾ãã
å
±æã¡ã¢ãªã¼ã¸ã®ã¢ã¯ã»ã¹ãå¾
ã¤ããã« Atomics.wait()
ã¾ã㯠Atomics.waitAsync()
ãå¼ã³åºãã¨ãã¹ã¬ããã¯ã³ã¢ããã¹ã±ã¸ã¥ã¼ãªã³ã°ãããå¾
æ©å¾ã«åã³ã³ã¢ã«æ»ãã¾ããããã¯ãå
±æã¡ã¢ãªã¼ã¸ã®ã¢ã¯ã»ã¹ã«æéãããããç«¶åã®æ¿ããå ´åã«ã¯å¹ççã§ããç«¶åãå°ãªãå ´åã¯ãã¹ã¬ãããè²æ¸¡ããã«ããã¯ããã¼ãªã³ã°ããæ¹ãå¹ççãªå ´åãå¤ãã§ãããã®ææ³ã¯ããã¸ã¼å¾
æ©ã¾ãã¯ã¹ãã³ããã¯ã¨å¼ã°ãã¦ãã¾ãã pause()
ã¡ã½ããã使ç¨ããã¨ãã¹ã¬ãããä½ããã¦ããããã¤ã¾ããªã½ã¼ã¹ã®å¿
è¦æ§ãä½ããã¨ã CPU ã«ç¥ããããã¨ã§ãå¾
æ©ä¸ã®ã¹ãã³ããã¯ã®å¹çãé«ãããã¨ãã§ãã¾ãã
両æ¹ã®æ¡ä»¶ã«å¯¾å¿ããã«ã¯ãç«¶åãå°ãªããã¨ãæå¾
ãã¦æåã«ã¹ãã³ããã¯ãããããã®å¾ããã°ããçµã£ã¦ãããã¯ãåå¾ã§ããªãã£ãå ´åã«å¾
æ©ããã¨ããææ³ãä¸è¬çã§ãããã§ã«ã¹ãã³ããã¯ã«ãã£ã¦ããã¯ãåå¾ãã¦ããå ´åã wait()
ã®å¼ã³åºãã¯ãã¼ãªãã¬ã¼ã·ã§ã³ã«ãªãã¾ãã
以ä¸ã®ä¾ã¯ããã®ææ³ã Atomics.pause()
ããã³ Atomics.wait()
ã¨ã¨ãã«ä½¿ç¨ããæ¹æ³ã示ãã¦ãã¾ãã
è¦å: ã¡ã¤ã³ã¹ã¬ããã§ã¹ãã³ããã¯ã使ç¨ãããã¨ã¯ããã¼ã¸å ¨ä½ãããªã¼ãºãã¦ãã¾ãããããå§ãã§ãã¾ãããä¸è¬çã«ãéå¸¸ã«æ éã«è¨è¨ããã¦ããªãéããã¹ãã³ããã¯ã¯é常ã®å¾ æ©ãããããã©ã¼ãã³ã¹ãåä¸ããã¨ã¯éãã¾ããã
// å¥ã®ã¹ã¬ããããã®å
±æã¡ã¢ãªã¼ã«ã¢ã¯ã»ã¹ã§ããã¨ãã¾ãã
const sab = new SharedArrayBuffer(1024);
const i32 = new Int32Array(sab);
// é«éãã¹: CPU ãçæéå転ããã
let spin = 0;
do {
if (Atomics.compareExchange(i32, 0, 0, 1) === 0) {
break;
}
Atomics.pause();
spin++;
} while (spin < 10);
// é
ããã¹ï¼ããã¯ãå¾
ã¤
// ã¡ã¤ã³ã¹ã¬ããã¯ãããã¯ã§ããªããããããã¯ã¯ã¼ã«ã¼
// ã¹ã¬ããã§ã®ã¿å¼ã³åºããã¨ãã§ãã¾ãã
Atomics.wait(i32, 0, 1);
åé¿æ¦ç¥
durationHint
弿°ã使ç¨ããã¨ãåé¿æ¦ç¥ãå®è£
ãããã¨ãã§ãã¾ããä¾ãã°ãã¹ã¬ããã¯å°ããªãã³ãã§éå§ããå復å¦çãã¨ã«ãããææ°é¢æ°çã«å¢å ããããã¨ãã§ãã¾ããããã¯ã JIT åããã¦ããªãã³ã¼ãã§ã¯é¢æ°å¼ã³åºãèªä½ã«é«ããªã¼ãã¼ãããããããããã pause()
ãä½åº¦ãå¼ã³åºããããæã¾ããæ¹æ³ã§ãã
ã¡ã¢: å®è£
ã«ãã£ã¦ã¯ãå®éã«ã¯ durationHint
ãã¾ã£ãã使ç¨ããã常ã«ä¸å®æéãå¾
ã¤å ´åãããã¾ãã
// ææ°ã®åé¿æ¦ç¥
for (let hint = 1; hint < 1000; hint *= 2) {
Atomics.pause(hint);
}
// ç·å½¢ã®åé¿æ¦ç¥
for (let hint = 1; hint < 100; hint++) {
Atomics.pause(hint);
}
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4