More Related Content
PPTX
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する PDF
C#次世代非同期処理概観 - Task vs Reactive Extensions PPTX
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE) PDF
Deep Dive async/await in Unity with UniTask(UniRx.Async) PDF
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅- PDF
PPTX
PPTX
StackStormではじめる1人Slackのすすめ What's hot
PDF
PDF
PDF
PPTX
PDF
2日間Fabricを触った俺が
色々解説してみる PPTX
KEY
PPTX
PDF
Nuxt.js + microCMS + netlify PPTX
PDF
PDF
Lisp Tutorial for Pythonista : Day 4 PDF
インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~ PDF
PDF
PDF
PDF
Ansible 2.0を使って組む kubernetesクラスタ vol.1 PDF
PDF
PDF
Viewers also liked
PDF
東京Node学園#8 Let It Crash!? PDF
東京Node学園#1「非同期プログラミングの改善」のエッセンス PDF
PDF
PDF
PDF
An Introduction to Guarded Horn Clauses PDF
Similar to 東京Node学園#3 Domains & Isolates
PPTX
PPTX
PDF
Reactive Extensionsで非同期処理を簡単に PDF
PDF
PDF
PPTX
PPTX
PPTX
モダン JavaScript における非同期処理 - Promise, async/await - PPTX
PPTX
PPTX
Hokuriku.net 2013 01-26 node.js PPTX
PDF
大阪Node学園八時限目 「expressで作るWebアプリ」 PDF
20190731 Azure Functions x Line at Azure Tech Lab #4 PPT
PDF
PPTX
PDF
PPTX
東京Node学園#3 Domains & Isolates
- 1.
- 2.
自己紹介
@koichik, id:koichik
JavaScriptとの関わり
1997年頃に仕事でServer-Side JavaScript
Netscape LiveWire, Microsoft IIS
Nodeとの関わり
2010/08から触り始める
APIドキュメント翻訳
node-handlersocket
2011/07から (なぜか) コアチーム入り
ろくに貢献できてないので頑張りますー
- 3.
Node安定版の歴史
v0.2 (2010/08/20)
v0.4 (2011/02/10)
SSL/TLSのオーバーホール
新しいHTTPクライアントAPI
組み込みデバッガ
v0.6 (2011/11/04)
ネイティブWindowsサポート
クラスタリング
さらに新しいHTTPクライアントAPI
- 4.
次期安定版
v0.8
2012/01リリース予定
V8のリリースサイクルに合わせて
短期間で頻繁なリリースを目指す
新機能の目玉
Domains
Isolates
- 5.
- 6.
- 7.
- 8.
エラーハンドリング
EventEmitterで'error'イベントが発生
リスナがなければ例外がスローされる
例外がイベントループに達する
processで'uncaughtException'イベントが発生
processで'uncaughtException'イベントが
発生
リスナがなければスタックトレースを
出力してプロセスは終了
http://d.hatena.ne.jp/koichik/20111213
- 9.
- 10.
そこで
関連するイベントをひとまとめに
それがDomains
適切な粒度でエラーハンドリング可能
Domainsにまとめられるイベント
対応モジュール (11/12/13時点)
net (tls, http, https)
dns
fs
timers
handleとして抽象化
- 11.
- 12.
- 13.
「現在の」ドメイン
(デフォルトドメイン)
デフォルトドメインに
関連
var req = http.request(...);
var myDomain = domains.createDomain(null, function() {
(myDomain)
これらは
var req = http.request(...); myDomainに
関連
setTimeout(function() {...}, 10000);
デフォルトドメインに
}); 関連
setTimeout(function() {...}, 10000);
- 14.
- 15.
- 16.
エラーハンドリング (v0.8~)
EventEmitterで'error'イベントが発生
リスナがなければ例外がスローされる
例外がイベントループに達する
非デフォルトドメイン実行中ならそのドメインで
'error'イベントが発生
デフォルトドメイン実行中ならprocessで
'uncaughtException'イベントが発生
processで'uncaughtException'イベントが発生
リスナがなければスタックトレースを出力して
プロセスは終了
- 17.
domainsのその他API
domains.getCurrent()
現在のドメインを返す
domains.add(handle)
handleを現在のドメインに追加
domains.remove(handle)
handleを現在のドメインから削除
domains.addDefaultDomain(handle)
handleをデフォルトドメインに追加
- 18.
- 19.
- 20.
- 21.
かなり昔のV8
V8
static変数を多用 Context
マルチスレッド非対応
Context
複数の「Context」を利用可能
独立した空間
Chromeでは<iframe>ごとに
Contextを作成
Nodeではvmモジュールで
利用可能
- 22.
今時のV8
Isolate
独立したVMのインスタンス
1プロセスで複数のIsolateを利用可能
マルチスレッド対応
Isolateは複数のContextを利用可能
V8
Isolate Isolate Isolate
Context Context Context
Context Context Context
- 23.
- 24.
- 25.
- 26.
IsolatesのAPI (2)
高水準API
child_process改めexec.fork()
Isolatesが有効だと子プロセスではなく
別スレッドでV8 Isolateを起動
同じアプリをマルチプロセスでも
マルチスレッドでも実行可能に
もちろんcluster.fork()も同様
- 27.
cluster
デフォルト Isolates有効
(Isolates無効)
Process
Process Isolate
(Master) (Master)
Process Process Isolate Isolate
(Worker) (Worker) (Worker) (Worker)
- 28.
- 29.
クラウド企業に支えられるNode
コアメンバーの6/8が関連企業に所属
Joyent @ry @isaacs @piscisaureus Cloud9 IDE
Rackspace @bnoordhuis @pquerna @igorzi Microsoft
- 30.
- 31.
- 32.
- 33.
Isolatesの狙い (推測)
性能(CPU以外のボトルネックがなければ)
複数VM ≒ 複数プロセス ≒ 複数スレッド
必要なリソース
複数VM > 複数プロセス > 複数スレッド
Isolatesにより
PaaS提供側のメリット
少ないリソースで同等の性能を提供可能
PaaS利用側のメリット
同等の性能を低コストで利用可能
- 34.
- 35.
- 36.
- 37.