プログラミング二回目です。前回の記事はWebWorkerとSharedArrayBufferとAtomics(1)です。ModelES2017のドラフトからMemoryModelという項目が追加された。これはSharedArrayBufferのDataBlockに適用されるモデルで、プログラムがとりうるメモリの順序を示したものである。Consistency(SeqCst)かUnorderedが定義される。UnorderedUnorderedとはメモリの順序に対して、各種スレッドが何の制約も持たいない状態である。1このように各スレッドによって値の見え方と順序は異なる。Consistencyはアクセスの原子性に加えて、各スレッドから見たメモリアクセスも決まった順序が保証される制約である。Consistencyが保証されている場合、thread2.jsとthread3.jsで値の見え方に差が出ることはありえない。Consistencyは全てのスレッドに対して順序通りの実行結果が観測される事を保証しているからである。Racesという状態が記述されている。happens-beforeDataRacesの前にhappens-before状態を理解せねばならない。happens-beforeとは以下の制約を満たす状態である。DとはイベントEがイベントDの前に発生する関係性である。yを確実に成り立たせることはできない。javascriptには他の言語にある、volatile修飾子のような仕組みが無いため、よりコントロール不可能である。RacesRacesとはプログラムが以下の状態であることである。Eを満たすときこれは以下のような状態である。Dを完全に満たしていない為、Racesである。Raceは以下の状態である。SC-DRFと呼ばれる状態である。全ての変数アクセス・書き込み順がSeqCstであれば、DataRaceFreeである。SharedArrayBufferには常にAtomicsでアクセスしましょうってことを覚えておけばいいんじゃなかろうか。おまけ(V8実装)現在のV8のAtomicsの実装はruntime-atomics.ccにある。なかの実装を見るとわかるけど、実際の処理はGCCの__atomic_xxx系かVSのInterlockedXXXで簡易に実装してある。4;}32ビットまでの配列に対応しているようだ。decoratorをつかってメモ化のような...2017-02-24HTML5とか勉強会「Webパフォーマンス」に参加してLTしてきたLTしてきた。早口すぎたなと思った。2はてなブログをはじめよう!brn_takeさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。