🕊️

【用語整理】スレッド/プロセスまわり

に公開

あれ?railsって並列で処理されるよね?スレッドだっけ??
あれ?スレッドとかプロセスとか、違いは??
となったので一度整理します。

プロセス

  • 実行中のプログラムのこと。OSが管理するもの。

  • OSは各プロセスにメモリ領域を割り当てる。各プロセスはメモリを共有しない!

  • psコマンドで確認できる

    $ ps
    PID TTY           TIME CMD
    1126 ttys001    0:00.01 -bash
    1155 ttys003    0:00.01 /bin/bash --init-file /Applications/Visual Studio Code
    1156 ttys005    0:00.01 /bin/bash --init-file /Applications/Visual Studio Code
    
    • ↑bashとVSCodeのプロセスが実行されている!
  • railsだと???

    # TODO: 確認??
    user    12345  0.0  1.5  50000 30000 ttys001  S+   10:00   0:00 ruby bin/rails server
    user    12346  0.1  2.5  80000 50000 ttys001  Sl   10:00   0:01 puma 5.6.4 ...
    
    • rails spumaのプログラムが実行されている!(rails sすると、webサーバー機能を持つpumaが実行されるらしいです)
  • 例文

    • 「こんにちは。実行中のプロセスを確認するコマンドを教えてください。」
    • 「dockerのプロセスを停止しましょう。はい。」

スレッド

  • プログラム内の処理の単位。

  • メモリ空間を共有して同時に実行される。

  • 種類

    • シングルスレッド
      • 1プロセス内で、1つの処理
      • A、B、Cの3つのリクエストが来た際、A -> B -> Cと順番に処理していく
    • マルチスレッド
      • 1プロセス内で、Nこの並列処理
      • A、B、Cの3つのリクエストが来た際、A / B / C を同時に処理していく
  • railsだと、pumaがスレッドを分けて処理する仕組みを持っている。詳しくは、次回調べます!

  • 例文

    • 「おはよう。railsは、マルチスレッドで動きます。」
    • 「僕は、スレッドセーフな実装をしなくてはならない。」

まとめ

  • こんな感じ

参考リンク

Discussion