Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
WebWorker And Atomics
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Taketoshi Aono(青野健利 a.k.a brn)
June 07, 2017
Programming
0
130
WebWorker And Atomics
WebWorkerとAtomics・SharedArrayBufferについて
Taketoshi Aono(青野健利 a.k.a brn)
June 07, 2017
Tweet
Share
More Decks by Taketoshi Aono(青野健利 a.k.a brn)
See All by Taketoshi Aono(青野健利 a.k.a brn)
document.write再考
brn
6
3.1k
Parsing Javascript
brn
14
9.5k
JSON & Object Tips
brn
1
550
CA 1Day Youth Bootcamp for Frontend LT
brn
0
1k
Modern TypeScript
brn
2
860
javascript - behind the scene
brn
3
800
tc39 proposals
brn
0
950
プロダクト開発とTypeScript
brn
8
3k
React-Springでリッチなアニメーション
brn
1
760
Other Decks in Programming
See All in Programming
API Platformを活用したPHPによる本格的なWeb API開発 / api-platform-book-intro
ttskch
1
130
encoding/json/v2のUnmarshalはこう変わった:内部実装で見る設計改善
kurakura0916
0
410
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
250
Windows on Ryzen and I
seosoft
0
280
野球解説AI Agentを開発してみた - 2026/02/27 LayerX社内LT会資料
shinyorke
PRO
0
270
Codexに役割を持たせる 他のAIエージェントと組み合わせる実務Tips
o8n
4
1.3k
20260313 - Grafana & Friends Taipei #1 - Kubernetes v1.36 的開發雜記:那些困在 Alpha 加護病房太久的 Metrics
tico88612
0
180
The Ralph Wiggum Loop: First Principles of Autonomous Development
sembayui
0
3.7k
Fundamentals of Software Engineering In the Age of AI
therealdanvega
1
250
ベクトル検索のフィルタを用いた機械学習モデルとの統合 / python-meetup-fukuoka-06-vector-attr
monochromegane
2
400
RAGでハマりがちな"Excelの罠"を、データの構造化で突破する
harumiweb
9
2.8k
nilとは何か 〜interfaceの構造とnil!=nilから理解する〜
kuro_kurorrr
3
1.9k
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
ラッコキーワード サービス紹介資料
rakko
1
2.6M
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.9k
Are puppies a ranking factor?
jonoalderson
1
3.1k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
84
Mobile First: as difficult as doing things right
swwweet
225
10k
The Curious Case for Waylosing
cassininazir
0
270
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
100
Ethics towards AI in product and experience design
skipperchong
2
220
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
380
The World Runs on Bad Software
bkeepers
PRO
72
12k
Transcript
WebWorker & Atomics
名前: @brn_take (青野健利) 職業: フロントエンドエンジニア・ネイティブエンジニア 会社: Cyberagent アドテクスタジオ RightSegment・AI Messenger
ブログ: http://brn-log.hatenablog.com/
WebWorker使ってますか?
WebWorker • ネイティブスレッド! • 起動も簡単 • メッセージパッシングでスレッドを意識しなくて良い Pros Cons •
文字列のやり取りしかできない • postMessage面倒くさい
What is SharedArrayBuffer? WebWorkerの欠点を解決するもの 各Worker間で値を共有することを可能にする。 これによって、WorkerのIOでserialize/deserializeする必要が なくなった。 しかし、新たな問題が… スレッド競合…
What is SharedArrayBuffer? // main.js const worker = new Worker('thread1.js');
const sharedArrayBuffer = new SharedArrayBuffer(1024); worker.postMessage(sharedArrayBuffer); worker.addEventListener('message', m => { console.log(sharedArrayBuffer); }); //thread.js onmessage = buffer => { fetch(...) .then(res => { const responseBuffer = new UInt8Array(res.arrayBuffer()); const targetBuffer = new UInt8Array(buffer); targetBuffer.copy(responseBuffer); postMessage(targetBuffer); }); }
What is Atomics? SharedArrayBufferの欠点を解決するもの Atomics経由でSharedArrayBufferの値に触れることで、 各スレッド間での変数アクセスの順序問題を解決する。
What is Atomics? // thread1.js onmessage = buffer => {
setTimeout(() => { buffer[0] = 1; buffer[1] = 1; }, 10000); } // thread3.js onmessage = buffer => { while (buffer[0] !== 0) { console.log(buffer[1]); //? } }
What is Atomics? // thread1.js onmessage = buffer => {
setTimeout(() => { Atomics.store(buffer, 1, 1); Atomics.store(buffer, 0, 1); }, 10000); } // thread3.js onmessage = buffer => { while (Atomics.load(buffer, 0) !== 0) { console.log(Atomics.load(buffer, 1)); //1 } }
What is Atomics? メモリモデル Sequence Consistencyが導入されます。 acquire/release等のモデルは導入されません。 実装 Google Chrome
CanaryとFirefoxで動きます。 エンジン 現在のV8ではコンパイラ組み込み関数 __atomics_** Interlocked** を使って実装されてます。 実装はsrc/runtime/runtime-atomics.ccにあります。
More detail ブログ見てね。 http://brn-log.hatenablog.com/entry/2017/02/07/164545
ありがとうございました!