The OMR GC Talk
OMRというランタイム
- 多くの言語に対応している
- (plugin機構で実現?)
調査はこれを使っていた模様 https://www.ibm.com/developerworks/jp/java/library/j-ibmtools5/
allocationを早くした
- スレッドローカルヒープ
- ロック無しでallocate
可変長のバッファを作る OMRのランタイム上で動作するGCがMRIに比べてよかった
GCのmark速度は早い(MRI)
OMR GCを確認するのはこれ https://github.com/rubyomr-preview/rubyomr-preview
Refinements - the Worst Feature You Ever Loved
method aliasとかモンキーパッチだと元の動きの振る舞いが全体に影響するからよくない
assertとかの振る舞いもかわってしまう
refinementsなら影響範囲を制御できる
スコープは働くので継承とかcalss_evalでも有効
文字列で与えたもので使えるeval ‘using SomeClass; hoge.fuga’みたいな感じなの
Discussion on Thread between version 1.8.6 and 2.2.3
Thread#status スレッドの状態が取れないような状況が起きた →mission crtalなシステムでも使えるThreadの使い方
- 子スレッドでforを同期的に上がった場合
- 同期的にraiseが上がった場合
Ruby2.2.3でも早くなったけど、CPU負荷も上がった 実行回数は変わらなかった
raiseのインスタンスは重い メモリ消費は少ない selectで対応することができる
早くなったけど、リソース消費も多いのでスレッドとかはメモリ消費量を意識したほうがよい
Plugin-based software design with Ruby and RubyGems
- 多くの機能
- コアコードがシンプル
- testが簡単
- developerコミュニティが活発
デザインパターン
- ホストアプリを拡張する(拡張ポイントを用意している、コールバックで実行)
- DIでプラグインを追加(I/Fとか決めてDIコンテナを置き換え、ホストからアプリを実行)
- 動的にプラグインをロードする方法
- 1と2を組み合わせる方法
プラグインのバージョンコントロール(依存ライブラリのコンフリクト解消)
fluentdは動的にpluguin emblukは組み合わせ
Actor, Thread and me
アクター
- メッセージを適当なタイミングで送る
- レシーブ
- 仕事をする
破綻の予兆
- 複数のイベントを待つ
- DBへの問い合わせとか
- 資源の協調