たくさんの処理を効率よく行うための手法として並列処理があります。
処理の単位をスレッドと呼び、並列で処理することをマルチスレッドと呼びます。
多くのプログラミング言語ではマルチスレッド処理を行うための機能が標準で提供されています。
本ブログでは、Python、Java、Ruby、Goのマルチスレッド処理について解説してきました。
本記事では、各言語のマルチスレッド処理について、比較しながらまとめていきます。
各言語における違いが分かったり、書き方を忘れてしまったときの復習用としても役立つ内容になっていますので、ぜひ最後までご覧いただければと思います。
本記事の最後に、各言語のソースコードを含む詳細内容を確認できる、関連ページへのリンクも用意しておきますので、気になる方はチェックしてみてください。
プログラミング言語のマルチスレッド処理まとめ
各言語のマルチスレッド処理について、以下の内容でまとめていきます。
- マルチスレッドを扱うモジュールやパッケージ
- スレッドの作成と起動
- スレッドからの戻り値やメッセージの取得
- スレッドプールの作成
マルチスレッドを扱うモジュールやパッケージ
言語 | マルチスレッドを扱うモジュールやパッケージ |
---|---|
Python
|
|
Java
|
|
Ruby
|
|
Go
|
|
スレッドを扱うための機能は、各言語ともに標準ライブラリやパッケージに含まれているため、特別なものは不要です。
スレッドを効率よく処理するためのスレッドプールを扱うための機能は、言語により提供されているものとないものがあります。
スレッドの作成と起動
言語 | スレッドの作成と起動 |
---|---|
Python
|
|
Java
|
|
Ruby
|
|
Go
|
|
スレッド化する処理は、事前に関数やメソッドとして作成しておき、それをスレッド作成時に指定します。
スレッドを起動した後に、呼び出し元のメインスレッドは処理が進んでしまうため、スレッドの処理が終了するまで待機させておく必要があります。
スレッドからの戻り値やメッセージの取得
言語 | スレッドからの戻り値やメッセージの取得 |
---|---|
Python
|
|
Java
|
|
Ruby
|
|
Go
|
|
スレッドから情報を受け取るには、最後に戻り値として受け取る方法と、任意のタイミングでメッセージとして受け取る方法があります。
Python、Java、Rubyは最後に戻り値として受け取る方法を標準で提供しています。
Goはスレッド間でメッセージをやり取りするチャネル機能を標準で提供しています。
スレッドプールの作成
言語 | スレッドプールの作成 |
---|---|
Python
|
|
Java
|
|
Ruby
|
|
Go
|
|
スレッドプールにより同時処理するスレッドの数を制限することができます。
PythonやJavaにはスレッドプールを扱うための機能が標準で提供されています。
Goはスレッド自体が軽量であり、OSスレッド上に作成されるため、スレッドの実行数をプログラム内で制御する必要はないという仕組みの違いがあります。
時間のかかる処理はマルチスレッド処理で効率よく実行しよう
UIに関連する処理や外部APIと連携する処理は、待ち時間が長くなると、利用者に不便な印象を与えてしまいます。
時間がかかる処理が複数ある場合は、マルチスレッドにより同時並行で処理できると全体の処理時間を短縮することができ、利用者の印象も良くなります。
今回はマルチスレッド処理について、各言語を比較しながらまとめました。
ソースコードも含めた各言語の詳細が記述されている、関連ページヘのリンクを以下にまとめておきますので、気になる方はチェックしてみてください。
以上、参考になれば幸いです。
コメント