More Related Content
Similar to Go言語オーバービュー201507
Similar to Go言語オーバービュー201507 (20)
More from エンジニア勉強会 エスキュービズム
More from エンジニア勉強会 エスキュービズム (20)
Go言語オーバービュー201507
- 9. “Go is a programming language
designed by Google to help
solve Google’s problems.” 8
- 28. プロセス
• メモリ分離モデル
• メリット
– 簡単
– OSが全てを処理
– 状態を持たない処理によい(Webリクエストなど)
– メモリリークがない
• デメリット
– プロセス間通信は難しい
– 利用メモリの増大
27
http://www.slideshare.net/ryanstout/concurrency-patterns-24110376
- 29. スレッド
• 共有メモリモデル
– 1プロセスに複数のスレッド
• メリット
– 利用メモリを節約できる
• デメリット(生で利用する場合)
– ロックの手動対応
– デッドロック
– 非決定的
– デバッグが難しい
28
http://www.slideshare.net/ryanstout/concurrency-patterns-24110376
- 30. イベント駆動IO
• Node.jsが従うモデル
– イベントループで各タスクを直列的に処理
• メリット
– 重たいIOタスクに最適
– スレッドのスイッチングコストを節約できる
– OSレベルでサポートされている(epoll、kqueue)
• デメリット
– 長期で走る処理が全ての処理をブロックする
– マルチコアを利用しない
– デバッグが難しい場合がある
29
http://www.slideshare.net/ryanstout/concurrency-patterns-24110376
- 33. アクターモデル
• Erlangが従うモデル
– 状態は各アクターの中で閉じる
– アクターはメッセージを非同期に送信
– メッセージは”mailbox”にバッファされる
• メリット
– デッドロックは発生しない(ルールを守れば)
– デバッグが容易
• デメリット
– アクター同士を結び付けるのが難しい
– エラーハンドリングは特殊
32
http://www.slideshare.net/ryanstout/concurrency-patterns-24110376
- 35. CSP
• Goが従うモデル
– 変数は常にスレッドローカル
– 状態は特定の長さのチャネルで共有される
– 関数は非同期な”goroutine”で処理される
• メリット
– 分散データ処理において比較的シンプルなモデル
– デバッグが容易
• デメリット
– 単純な同期処理ではコードが余計にかかる
34
(Communicating Sequential Processes)
http://www.slideshare.net/ryanstout/concurrency-patterns-24110376