Baseline Widely available *
Atomics
åå空éãªãã¸ã§ã¯ãã«ã¯ãä¸å¯åæä½ãå®è¡ããããã®éçã¡ã½ãããå«ã¾ãã¦ãã¾ããããã㯠SharedArrayBuffer
ããã³ ArrayBuffer
ãªãã¸ã§ã¯ãã§ä½¿ç¨ããã¾ãã
ã»ã¨ãã©ã®ã°ãã¼ãã«ãªãã¸ã§ã¯ãã¨ã¯ç°ãªããAtomics
ã¯ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ã¯ããã¾ããã new
æ¼ç®åã¨ä¸ç·ã«ä½¿ç¨ãããã Atomics
ãªãã¸ã§ã¯ãã颿°ã¨ãã¦å¼ã³åºããããããã¨ã¯ã§ãã¾ããã Atomics
ã®ãã¹ã¦ã®ããããã£ã¨ã¡ã½ããã¯éçã§ãï¼Math
ãªãã¸ã§ã¯ãã®å ´åã¨åæ§ã§ãï¼ã
ã¡ã¢ãªãå ±æããã¦ããå ´åãè¤æ°ã®ã¹ã¬ãããã¡ã¢ãªã¼å ã®åããã¼ã¿ãèªã¿æ¸ãã§ãã¾ããä¸å¯åæä½ã§ã¯ãäºæ¸¬ãããå¤ã®æ¸ãè¾¼ã¿ã¨èªã¿è¾¼ã¿ãä¿è¨¼ãããããæ¬¡ã®æ¼ç®ãéå§ãããåã«ç¾å¨ã®æ¼ç®ãå®äºãããã®æ¼ç®ãå²ãè¾¼ã¾ããªãããã«ãã¾ãã
wait 㨠notifywait()
ã¡ã½ãã㨠notify()
ã¡ã½ããã¯ã Linux ã® futex ("fast user-space mutex") ãååã¨ãã¦ãããç¹å®ã®æ¡ä»¶ã true ã«ãªãã¾ã§å¾
ã¤ææ®µãæä¾ãã¾ããä¸è¬çã«ã¯ããããã³ã°æ§é ã¨ãã¦ä½¿ç¨ããã¾ãã
Atomics[Symbol.toStringTag]
[Symbol.toStringTag]
ããããã£ã®åæå¤ã¯æåå "Atomics"
ã§ãããã®ããããã£ã¯ Object.prototype.toString()
ã§ä½¿ç¨ããã¾ãã
Atomics.add()
é åã®æå®ããä½ç½®ã«ããæ¢åã®å¤ã«æå®ããå¤ã追å ãã¾ãããã®ä½ç½®ã«ãã£ãå¤ãå¤ãè¿ãã¾ãã
Atomics.and()
é åã®æå®ããä½ç½®ã®å¤ã¨æå®ããå¤ã§ãããåä½ã®è«çç© (AND) ãè¨ç®ãã¾ãããã®ä½ç½®ã«ãã£ãå¤ãå¤ãè¿ãã¾ãã
Atomics.compareExchange()
å¤ãçããå ´åãé åã®æå®ããä½ç½®ã«å¤ãæ ¼ç´ãã¾ããå¤ãå¤ãè¿ãã¾ãã
Atomics.exchange()
é åã®æå®ããä½ç½®ã«å¤ãæ ¼ç´ãã¾ããå¤ãå¤ãè¿ãã¾ãã
Atomics.isLockFree()
ããã¯æ©æ§ã¨ä¸å¯åæä½ã®ã©ã¡ãã使ç¨ããããæ±ºå®ããããã®æé©åããªããã£ãã§ããæå®ããè¦ç´ ãµã¤ãºã®é
åä¸ã®ä¸å¯åæä½ã (ããã¯ã§ã¯ãªã) ãã¼ãã¦ã§ã¢ã«ããä¸å¯åæä½ã使ç¨ããããå®è£
ããã¦ããå ´åã true
ãè¿ãã¾ããä¸ç´è
ã ãã使ç¨ãã¦ãã ããã
Atomics.load()
é åã®æå®ããä½ç½®ã®å¤ãè¿ãã¾ãã
Atomics.notify()
é åã®æå®ããä½ç½®ã§å¾ æ©ä¸ã®ã¨ã¼ã¸ã§ã³ãã«éç¥ãã¾ããéç¥ãåããã¨ã¼ã¸ã§ã³ãã®æ°ãè¿ãã¾ãã
Atomics.or()
é åã®æå®ããä½ç½®ã®å¤ã¨æå®ããå¤ã§ãããåä½ã®è«çå (OR) ãè¨ç®ãã¾ãããã®ä½ç½®ã«ãã£ãå¤ãå¤ãè¿ãã¾ãã
Atomics.pause()
å¼ã³åºãå´ãå ±æãªã½ã¼ã¹ã¸ã®ã¢ã¯ã»ã¹ãå¾ æ©ãã¦ããéãCPU ã«ãã®ãã¨ãç¥ããããã¤ã¯ãã¦ã§ã¤ãããªããã£ããæä¾ãã¾ããããã«ãããã·ã¹ãã ã¯ãç¾å¨ã®ã¹ã¬ãããè²ããã¨ãªããã³ã¢ï¼é»åãªã©ï¼ã¾ãã¯ã¹ã¬ããã«å²ãå½ã¦ããã¦ãããªã½ã¼ã¹ã縮å°ãããã¨ãã§ãã¾ãã
Atomics.store()
é åã®æå®ããä½ç½®ã«æå®ããå¤ãæ ¼ç´ãã¾ãããã®å¤ãè¿ãã¾ãã
Atomics.sub()
é åã®æå®ããä½ç½®ã®å¤ããæå®ããå¤ãæ¸ç®ãã¾ãããã®ä½ç½®ã«ãã£ãå¤ãå¤ãè¿ãã¾ãã
Atomics.wait()
é
åã®æå®ä½ç½®ã«æå®ããå¤ãå«ã¾ãã¦ãããæ¤è¨¼ãã伿¢ãã¦å¾
æ©ãããã¿ã¤ã ã¢ã¦ããã¾ãã "ok"
ã"not-equal"
ã"timed-out"
ã®ããããã®æååãè¿ãã¾ããå¼ã³åºãå
ã®ã¨ã¼ã¸ã§ã³ãã§å¾
æ©ã許å¯ããã¦ããªãå ´åãä¾å¤ãçºçãã¾ããï¼ã»ã¨ãã©ã®ãã©ã¦ã¶ã¼ã§ã¯ããã©ã¦ã¶ã¼ã®ã¡ã¤ã³ã¹ã¬ããã§ wait()
ã許å¯ãã¦ãã¾ãããï¼
Atomics.waitAsync()
å
±æã¡ã¢ãªã¼ä¸ã®å ´æãéåæçã«ï¼ã¤ã¾ããAtomics.wait
ã¨ã¯ç°ãªãããããã¯ããã«ï¼å¾
æ©ããæä½ã®çµæã表ããªãã¸ã§ã¯ããè¿ãã¾ãã
Atomics.xor()
é åã®æå®ããä½ç½®ã®å¤ã¨æå®ããå¤ã§ãããåä½ã®æä»çè«çå (XOR) ãè¨ç®ãã¾ãããã®ä½ç½®ã«ãã£ãå¤ãå¤ãè¿ãã¾ãã
const sab = new SharedArrayBuffer(1024);
const ta = new Uint8Array(sab);
ta[0]; // 0
ta[0] = 5; // 5
Atomics.add(ta, 0, 12); // 5
Atomics.load(ta, 0); // 17
Atomics.and(ta, 0, 1); // 17
Atomics.load(ta, 0); // 1
Atomics.compareExchange(ta, 0, 5, 12); // 1
Atomics.load(ta, 0); // 1
Atomics.exchange(ta, 0, 12); // 1
Atomics.load(ta, 0); // 12
Atomics.isLockFree(1); // true
Atomics.isLockFree(2); // true
Atomics.isLockFree(3); // false
Atomics.isLockFree(4); // true
Atomics.or(ta, 0, 1); // 12
Atomics.load(ta, 0); // 13
Atomics.store(ta, 0, 12); // 12
Atomics.sub(ta, 0, 2); // 12
Atomics.load(ta, 0); // 10
Atomics.xor(ta, 0, 1); // 10
Atomics.load(ta, 0); // 11
å¾
æ©ã¨éç¥
å
±æããã Int32Array
ãããã¨ãã¾ãã
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);
èªã¿åãã¹ã¬ããã¯ãæå®ãããå¤ãæå®ãããã¤ã³ããã¯ã¹ã«æ ¼ç´ããã¦ããå¤ã¨ä¸è´ãã¦ãããããä½ç½® 0 ã§ä¼ç ç¶æ
ã§å¾
æ©ãã¦ãã¾ãã èªã¿åãã¹ã¬ããã¯ãæ¸ãè¾¼ã¿ã¹ã¬ãããæå®ãããåä»ãé
åã®ä½ç½® 0 ã§ Atomics.notify()
ãå¼ã³åºãã¾ã§ãåä½ãã¾ããã ãã ãã復帰å¾ã«ãæ¸ãè¾¼ã¿ã¹ã¬ããã«ãã£ã¦ä½ç½® 0 ã®å¤ã夿´ããã¦ããªãå ´åãèªã¿åãã¹ã¬ããã¯ä¼ç ç¶æ
ã«æ»ãããå¦çãç¶ãã¾ãã
Atomics.wait(int32, 0, 0);
console.log(int32[0]); // 123
æ¸ãè¾¼ã¿ã¹ã¬ãããæ°ããå¤ãæ ¼ç´ããå¾ æ©ãã¦ããã¹ã¬ããã«æ¸ãè¾¼ã¿ãçºçãããã¨ãéç¥ãã¾ãã
console.log(int32[0]); // 0;
Atomics.store(int32, 0, 123);
Atomics.notify(int32, 0, 1);
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
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