Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
40
Help us understand the problem. What is going on with this article?
@shotaTsuge

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

More than 5 years have passed since last update.

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

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

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

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

メリット

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

デメリット

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

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

メリット

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

デメリット

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

考察

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

40
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
40
Help us understand the problem. What is going on with this article?