プログラムは実行される際、プロセスという単位で実行領域がメモリ上に割り当てられ、処理が順次実行されていきます。(逐次処理)
マルチスレッドプログラミングとは、プロセスの中の処理を複数のスレッドに分割することで、片方のスレッドがネットワークの応答待ちなど、計算領域を効率よく使えていない時間にも別の処理を進めることができ、実行速度やプログラム構造の改善をすることができます。(並行処理)
タスクの流れ
1.任意のWebサイトへアクセスするWebクローラーの作製。
2.逐次処理により、複数の異なるWebサイト(10サイト程度)にクローリングを行い、終了までの所要時間を計測。
3.並行処理により、2で対象としたWebサイトにクローリングを行い、終了までの所要時間を計測。
4.横軸を並行処理に用いたスレッド数N(スレッド)、縦軸を処理時間T(秒)としたプロットを作成(Nは15程度)
STEP 1. Webクローラーの作製
適当なpythonのライブラリを用い、URLを引数として対象WebサイトのHTMLを返すWebクローラーを作製します。
クローラー用のライブラリはurllib, requestsなどたくさんの種類がありますので、使いやすいものを選択します。
STEP 2. 逐次処理によるクローリング
10個の異なるWebサイトのURLに対し、STEP 1で作製したクローラーを用いて処理終了までの所要時間を計測します。
Hint: Pythonのlistやtupleなどに対象となる複数のURLを格納し、forループを回します。
STEP 3. 並行処理によるクローリング
STEP 2 で用いたURLに対し、STEP 1で作製したクローラーを用いて処理終了までの所要時間を計測します。
但し、今回は適当なPythonのライブラリを用いて並行処理を行います。使用するスレッド数は4とします。
並行処理用のライブラリにはthreadingがあります。
Hint: 並行処理をするためには、クローラーの入力がどのような形でなければならないか注意しましょう。
STEP 4. スレッド数 vs. 処理時間のグラフの作製
並行処理に使用するスレッド数を変えて(1から15程度まで)、STEP 3を行います。
横軸をスレッド数N、縦軸を所要時間T(秒)とし、グラフにプロットします。
Hint: 各スレッド数に対する結果は、一旦外部に保存しておくと作業がしやすいかもしれません。