はじめに

本当はアプリケーションサーバーについて書こうと思っていました。
ただ、比較しようとしたUnicornとPumaはそれぞれプロセスベース、スレッドベースのサーバーであり、私自身、そもそもプロセスとスレッドに関する知識が不足しておりました。
そのため、今回は簡単にまとめたいと思います。

プロセス

あるプログラムを実行しようとするときに立ち上がります。
UNIXコマンドにはpsというプロセスを確認するコマンドがあります。

User:~ user$ ps
  PID TTY           TIME CMD
  405 ttys000    0:02.17 -bash
27681 ttys002    0:01.10 -bash
38161 ttys003    0:00.50 -bash

3つのプロセスが立ち上がっていることが分かります。
ここで、別ウィンドウを使ってvi test.txtをやってみます。

User:~ user$ ps
  PID TTY           TIME CMD
  405 ttys000    0:02.17 -bash
27681 ttys002    0:01.10 -bash
38161 ttys003    0:00.50 -bash
38514 ttys003    0:00.06 vi text.txt

1つプロセスが増えていることが分かります。
viを終了するとプロセスは終了します。

スレッド

1つのプロセスの中で、複数の処理を並列処理したいときに使われるのがスレッドです。
例えば、「味噌汁を作る」というプロセスがあったとき、その中には、

  • 材料を切る。
  • 鍋の準備をする。
  • 味噌を入れて煮る。

という作業がありますが、これらはいくつかを同時処理できるのではないでしょうか?
(例えが的を得ているかは分かりませんが。。。)
そのときに、プロセスにぶら下がるかたちでスレッドができます。

UNIXコマンドのtopを使用すると、そのPCのプロセスやスレッドを見ることができます。

Processes: 188 total, 2 running, 9 stuck, 177 sleeping, 1274 threads         23:32:23
Load Avg: 2.53, 2.31, 2.16  CPU usage: 13.25% user, 6.98% sys, 79.75% idle
SharedLibs: 50M resident, 0B data, 4472K linkedit.
MemRegions: 95284 total, 843M resident, 13M private, 230M shared.
PhysMem: 4074M used (1451M wired), 21M unused.
VM: 3670G vsize, 1352M framework vsize, 28282487(64) swapins, 30613928(0) swapouts.
Networks: packets: 5402196/5208M in, 4184197/535M out.
Disks: 8948876/217G read, 2707994/185G written.

今は全部で188のプロセスと1274のスレッドが立ち上がっていることが分かります。

おわりに

本当に簡単でしたが、プロセスとスレッドの簡単な違いについて書きました。
次回はアプリケーションサーバーについて書きたいと思うので、今回はこのあたりで!

Shere
  • はてなブログ
  • Twitter
  • Facebook
プロセスとスレッドについて

Writer

  • Name

    Naoki

  • Position

    RubyやPHPが書きたい雑用

  • Profile

    最近、(自称)PHPerから(自称)Rubyistに移行しようと考えている雑用です。Rubyのオブジェクト 指向はすごい分かりやすいので好きになりました。また、メソッド名に?が使えるのも良いですよね!