Working With Unix Processes   の残りを読んだよ  Katsuji Ishikawa <katsuji.ishikawa@gmail.com>
前回
Orphaned Processes    の章まで
続き
menu•   (再)Working With Unix Processes てなに•   各チャプターまとめ
Working With Unix        Processes てなに•   http://workingwithunixprocesses.com/    •   What a file descriptor is and how it ...
各チャプターまとめ
Processes Are Friendly•   fork(2) は親プロセスのコピー•   メモリ全てまるっと•   かなりオーバーヘッドがある•   モダーンな *nix ではcopy-on-write(CoW)    が採用されている
Processes Are      Friendly(cont.)•   (その名の通り)書き換える必要があるまで    コピーを遅らせる•   リソース節約♡•   でも・・・
Processes Are            Friendly(cont.)•   MRI(~1.8.x) (と Rubinius) は CoW サポートしてない    •   GC 周りが CoW に向いてなかったらしい•   なので R...
Processes Are         Friendly(cont.)•   じゃ、Python の GC はどうなのよ•   reference counting / mark-and-sweep らしい    けどよくわからん><
Processes Can Wait•   まてるよ•   サンプルコードども    •   Process.wait        •   pid を返す
Processes Can            Wait(cont.)•   Process.wait は pid を返す•   Process.wait2 というのもあるよ    •   Process.wait2 は pid と stat...
Processes Can          Wait(cont.)•   Process.waitpid, Process.waitpid2 というの    もある•   Process.wait, Process.wait2 と実体は同  ...
Processes Can             Wait(cont.)•   競合問題 - 大丈夫だ、問題ない•   サンプルコード•   *nix プログラミングでは一般的な方法    •   babysitting processes ...
Processes Can             Wait(cont.)•   unicorn    •   (python なら gunicorn)    •   fork した子プロセスがリクエストを捌く        •   応答してる...
Zombie Processes•   (略)m(_ _)m
Processes Can Get          Signals•   シグナル•   SIGCHLD をトラップしてみる•   サンプルコード•   シグナルの配送は信頼できない><
Processes Can Get           Signals(cont.)•   どれかの動作をする    •   無視する    •   指定のアクションを実行    •   デフォルトのアクションを実行
Processes Can Get           Signals(cont.)•   シグナルはどこからくるの    •   カーネルによって送られる•   ほげプロセス <=> カーネル <=> ふがプロセ    ス•   irb 実行...
Processes Can Get       Signals(cont.)•   シグナルを再定義•   シグナルの無視•   ほか - kill コマンド
Processes Can Get           Signals(cont.)•   unicorn だと    •   INT で即座に終了    •   USR2 でダウンタイムなしの再起動    •   TTIN で ワーカーを増や...
Processes Can         Communicate•   プロセス間通信•   パイプ•   一方通行•   irb で試してみる•   IO.pipe は pipe(2)
Daemon Processes•   バックグラウンドで動き続けるプロセス•   Webサーバ、DBサーバ•   GUI ならウィンドウシステムだったり•   いろいろ•   Rack をみてみる (server.rb)
Daemon Processes         (cont.)•   1.9 以降なら Process.daemon だけで済む..•   なにをしてるか追って見る•   Process.setsid は setsid(2), Process...
Spawing Terminal          Processes•   fork + exec•   プロセスを置き換える•   fork でプロセス作成(コピー), exec で変身•   Kernel#system は system(...
Ending•   2つ    •   抽象化    •   通信•   ネットワークは別の書籍に..•   Appendix も読もう    •   Resque, Unicorn, Prefork サーバについて
Working With Unix Processes の残りを読んだよ.
Upcoming SlideShare
Loading in …5
×

Working With Unix Processes の残りを読んだよ.

1,072 views

Published on

Working With Unix Processes の残りを読んだ。 社内自グループでの勉強会で使用。
本書は Ruby で解説してある中、多少 Python ではどうよと触れるなど。

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,072
On SlideShare
0
From Embeds
0
Number of Embeds
81
Actions
Shares
0
Downloads
3
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Working With Unix Processes の残りを読んだよ.

  1. 1. Working With Unix Processes の残りを読んだよ Katsuji Ishikawa <katsuji.ishikawa@gmail.com>
  2. 2. 前回
  3. 3. Orphaned Processes の章まで
  4. 4. 続き
  5. 5. menu• (再)Working With Unix Processes てなに• 各チャプターまとめ
  6. 6. Working With Unix Processes てなに• http://workingwithunixprocesses.com/ • What a file descriptor is and how it works. • When you need a daemon process, and when you dont. • Creating new processes with fork(2). • 4 different ways to exit a process. • The real world concerns of spawning shell commands and how to avoid them. • High level discussion about the costs and pitfalls of creating processes. • Defining signal handlers that dont steal from other developers. • Internals of Resque and Unicorn and how they use this stuff. • Lots more! Its 130 pages packed with guidelines, sample code, and best practices.
  7. 7. 各チャプターまとめ
  8. 8. Processes Are Friendly• fork(2) は親プロセスのコピー• メモリ全てまるっと• かなりオーバーヘッドがある• モダーンな *nix ではcopy-on-write(CoW) が採用されている
  9. 9. Processes Are Friendly(cont.)• (その名の通り)書き換える必要があるまで コピーを遅らせる• リソース節約♡• でも・・・
  10. 10. Processes Are Friendly(cont.)• MRI(~1.8.x) (と Rubinius) は CoW サポートしてない • GC 周りが CoW に向いてなかったらしい• なので Ruby Enterprise Edition (REE)作られたり• Twitter は REE に手を加えた kiji 作ったり• その後改善されて REE は\(^o^)/オワタ • http://www.infoq.com/jp/news/2012/03/ruby-eee-eol
  11. 11. Processes Are Friendly(cont.)• じゃ、Python の GC はどうなのよ• reference counting / mark-and-sweep らしい けどよくわからん><
  12. 12. Processes Can Wait• まてるよ• サンプルコードども • Process.wait • pid を返す
  13. 13. Processes Can Wait(cont.)• Process.wait は pid を返す• Process.wait2 というのもあるよ • Process.wait2 は pid と status を返す • サンプルコード
  14. 14. Processes Can Wait(cont.)• Process.waitpid, Process.waitpid2 というの もある• Process.wait, Process.wait2 と実体は同 じ。”特定の” pid の子を待つ
  15. 15. Processes Can Wait(cont.)• 競合問題 - 大丈夫だ、問題ない• サンプルコード• *nix プログラミングでは一般的な方法 • babysitting processes • master/worker • preforking • などと呼ぶ
  16. 16. Processes Can Wait(cont.)• unicorn • (python なら gunicorn) • fork した子プロセスがリクエストを捌く • 応答してるか親がチェック• 並行性と信頼性の両立• Ruby の Process.wait は waitpid(2)
  17. 17. Zombie Processes• (略)m(_ _)m
  18. 18. Processes Can Get Signals• シグナル• SIGCHLD をトラップしてみる• サンプルコード• シグナルの配送は信頼できない><
  19. 19. Processes Can Get Signals(cont.)• どれかの動作をする • 無視する • 指定のアクションを実行 • デフォルトのアクションを実行
  20. 20. Processes Can Get Signals(cont.)• シグナルはどこからくるの • カーネルによって送られる• ほげプロセス <=> カーネル <=> ふがプロセ ス• irb 実行したターミナルを2つ起動してみる• INT, TERM, KILL
  21. 21. Processes Can Get Signals(cont.)• シグナルを再定義• シグナルの無視• ほか - kill コマンド
  22. 22. Processes Can Get Signals(cont.)• unicorn だと • INT で即座に終了 • USR2 でダウンタイムなしの再起動 • TTIN で ワーカーを増やす• Ruby の Process.kill は kill(2)
  23. 23. Processes Can Communicate• プロセス間通信• パイプ• 一方通行• irb で試してみる• IO.pipe は pipe(2)
  24. 24. Daemon Processes• バックグラウンドで動き続けるプロセス• Webサーバ、DBサーバ• GUI ならウィンドウシステムだったり• いろいろ• Rack をみてみる (server.rb)
  25. 25. Daemon Processes (cont.)• 1.9 以降なら Process.daemon だけで済む..• なにをしてるか追って見る• Process.setsid は setsid(2), Process.getpgrp は getpgrp(2), など
  26. 26. Spawing Terminal Processes• fork + exec• プロセスを置き換える• fork でプロセス作成(コピー), exec で変身• Kernel#system は system(3), Kernel#exec は execve(2)など
  27. 27. Ending• 2つ • 抽象化 • 通信• ネットワークは別の書籍に..• Appendix も読もう • Resque, Unicorn, Prefork サーバについて

×