現代のプログラミングではよりよい性能のためにマルチコア、マルチスレッドで動作するコードを書くというのは珍しくないと思います。多くのプログラミング言語ではユーザに利用しやすい形でそのための言語機能や標準ライブラリを提供しています。ですが抽象化のレイヤを降りて、例えば CPU のレベルで考えると同期化のために難しい概念というのが多数登場します。 ここではその中で「メモリコンシステンシ」について自分の理解をまとめました。これは言語によっては完全に隠された概念だと思うのですが C++ や Rust ではアトミックな操作に std::memory_order や std::sync::atomic::Ordering というパラメータを渡すことで、操作が従うべきメモリコンシステンシモデルを指定できます。最初のうちはそう言われても? という感じだったのですが、いくつか良質な資料に出会い徐々に理解ができ
TL;DR; Eventual Consistencyとか言いながらどうせもっとまともな一貫性実装してることはよくあるんだからみんな適切な名前を使おうぜ。 なぜこの記事を書くのか NoSQLの文脈においてスケーラビリティとのトレードオフでEventual Consistencyという用語は結構な頻度で出てくる。 ACIDに対抗してBASE(Basicaly Avalilable, Soft state, Eventual consistency)なんて言葉が出てきたり、CAP定理の中のAとPだと言ってみたり、分散システムのスケーラビリティを高めるために人類は一貫性を諦めることに余念がない。 その一方で、諦められた一貫性に関しては雑な分類論で語られる事が多く実はもっと適切な言葉があるのに「Eventual Consistencyです」なんて言われる事が良くある。そこで、この記事では過去に並行
これまで多くのトランザクションの要素技術を説明してきた。 Googleの公開している論文Spanner: Google's Globally-Distributed Database は公開当初、要求される専門技術の多さからよくわからないと言っている人が多かったが、これまでに説明した要素技術をベースにすると理解しやすい。 Spannerとは 複数のデータセンターに跨ってデータベースの内容を複製し続ける事で高い可用性を実現するという構想は数多くあった。 しかしそれらの分散データベースは実用的な速度を実現しようとすると、データモデルがただのRDBより単純化して使いにくかったりトランザクションをサポートしなかったりと、アプリケーションの一貫性を実現するのが難しい。 現にGoogleの社内でもBigtableなどを用いたアプリケーションは複数あるものの、それぞれでそのデータモデルの上で無理やりトラ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く