LoginSignup
66
43

More than 5 years have passed since last update.

スレッドとマルチプロセスの比較

Last updated at Posted at 2015-11-30

半年間、MySQLを基礎からやり直すことにしたので、その間に勉強したことをQiitaに投稿していきます。

スレッドとマルチプロセスの大まかな違い

大きな違いとしては、子スレッドは親とヒープ(グローバルなプログラムデータ)を共有するのに対し、
子プロセスは共有しない

スレッドのメリット・デメリット

メリット

  • メモリ使用率が低い。
  • サーバグローバルデータにアクセスするのに高度なテクニックがいらない。
  • 同時実行スレッドによるデータ変更の際も、相互排除ロック(ミューテック)を使用して該当セクションを保護するだけで済む。
  • ヒープセグメントをコピーする必要が無いので、プロセスよりもずっと少ない時間で作成できる
  • スケジューラのコンテキストスイッチでカーネルが要する時間が、プロセスよりも少ない

デメリット

  • 1つのスレッドがクラッシュするとサーバ全体に影響が及んでしまう
  • プログラミングミスが起こりやすい
  • スレッドサーバでの同期バグ(共有アドレス空間による)
  • ミューテックス競合が起こると収拾がつかなくなる(過度なコンテキストスイッチ発生の原因になる)

マルチプロセスのメリット・デメリット

メリット

  • 不正なサーバプロセスがあってもサーバ全体へ影響が出ない
  • 1つの実行スレッドのみを頭に入れていればよいので、プログラミングミスが起きにくい
  • ファントムバグ(意図的に再現できないバグ)が起きる可能性が低い為、バグの再現が容易に行える
  • 個々のプロセスで専用のアドレス空間を持つ為、プロセス間での相互作用は大きくならない

デメリット

  • 子プロセスが分岐した場合、大きなメモリセグメントが不要にコピーされる可能性がある
  • プロセス間でデータを共有するのに手間がいり、サーバグローバルデータへのアクセスが面倒
  • プロセスの作成にカーネルにより多くのオーバヘッドを強いる
  • 親プロセスのデータセグメントをコピーしなければならない
  • プロセス間のコンテキストスイッチにより多くの時間を消費する

考察

接続ハンドラ間で、大量のデータを共有する必要がある(プログラムスキルが高い)場合は、スレッドサーバが向いてているかと個人的には思いました。

66
43
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
66
43