プロセスとスレッドの違い

Posted on
この記事は、最終更新日から 10 年以上経過しています。 情報が古い可能性があります。

linux上のアプリケーションはプロセスとして起動されます。

プロセスを管理することはOS(ここではlinux)の重要な役割であり、プロセスのスケジューリング、割り込み、シグナル制御、優先度の制御、プロセスの切り替え、状態管理、メモリ管理などを行っています。

プロセスとは何でしょう?

プロセスはCPU上で実行されるもので、タスクを完了するために、Linuxのカーネルが制御するあらゆるリソースを使うことができます。

スレッドとは何でしょう?

スレッドは1つのプロセスから生成される実行単位です。同じプロセスから並行でスレッドを起動させることができます。

スレッドはメモリや、オープン中のファイルなどのリソースを共有することができます。同じアプリケーションのデータにアクセスすることができるのです。

プロセスはリソースを共有することができないので、これは大きな違いです。

言い換えると、スレッドは同じタイミングで、共有しているリソースに変更をかけるべきではないことも意味しています。

そのために、ロックをかけたり、シリアルに動かしたりという制御をするのはアプリケーションの責任ということになります。

プロセスとスレッドの違い。

上記で少し触れましたが、プロセスはリソースを共有することができません。そのため、プロセスを起動させるには、リソースをコピーすることが必要になってきます。

その分、性能の観点からはスレッドを起動するほうが、効率的、ということになります。

一方、プロセスとスレッドは、スケジューリングの観点からは同じような特徴を持っていますので、カーネルからは同じように扱われます。

process-thread

+++

参考:Linux Performance and Tuning Guidelines