もう二度と重たいプログラマにならないためのメモです。
を見て勉強しました。
プロセスとスレッド
まずここからちんぷんかんぷんだったので勉強していきます。
まずは用語説明
プロセス
プログラムの実行単位
実行中のexeファイルとか
スレッド
一連のプログラムの流れのこと
プロセスとスレッドの関係
プロセスの中にあるプログラムの流れがスレッドです。
なので、プロセスの中にスレッドが複数あっても大丈夫です。
ちなみに、プロセスの中に...
スレッドが1つ → シングルスレッド
スレッドが複数 → マルチスレッド
っていいます。
どんなときにマルチスレッドを使うのか
パフォーマンスを向上させたい時に使います。
遅いなぁとか重いなぁとかで困ったらマルチスレッドの出番かもしれません。
パフォーマンスの向上
パフォーマンスの向上には次の2つを向上させると良きらしい。
- レスポンスタイムの向上
- スループットの向上
じゃあこの2つを向上するためには何が必要なのって話になるので見ていきましょう。
レスポンスタイムの向上
まずレスポンスタイムとは処理のリクエストを出してから、最初の反応が返ってくるまでの時間です。
サーバに処理を要求して何か返答が返ってくるまでの時間ってことですねぇ?
レストランでシェフが料理してウェイターがお客に料理を運ぶまでの時間ってことかな?
参考→レスポンスタイムとターンアラウンドタイムの違いを調べよう!
やることは次の2つらしいです。
- 重たい処理の別スレッド化
- 複数クライアントへの順次応答
重たい処理の別スレッド化
重たい処理は次のようなものらしいです。
・時間のかかる計算
・ネットワークによる通信
・ディスクへのアクセス などなど
これらをマルチスレッドにしないで野放しにするとどうなるのか。
例えば処理Aと処理BがあってA→Bの順に処理するとします。
シングルスレッドの場合はAが終わってからじゃないとBをしません。
Aがめっちゃ時間かかる場合Bはずっと待たなきゃいけません。
前のやつがめっちゃ買い物多くて列ができるスーパーのレジみたいなかんじですかね。
レジの台数増やしたら混み具合も解消しますね。つまりそうゆうことですかね。
複数クライアントへの順次応答
これもまあさっきのことと同じようなもんですねぇ。
暗殺教室で殺せんせーがめっちゃ早く動きながら生徒ひとりひとりに勉強を教えてたみたいなことですよね。
スループットの向上
スループットっていうのは単位時間に処理できる量でこれが強いと良いなぁって。
要領いい人っていいですよねって話?
やることは次の2つらしいです。
- 遅いデバイスによるCPU待機時間に利用
- マルチプロセッサの活用
書くの疲れたのでこちらをご覧ください
第1回 マルチスレッドはこんなときに使う (2/2)
同期処理と非同期処理
サブウェイとドトールの例で勉強してきました。
簡単に書くと
同期処理
書かれた順番に処理をする。
A,B,Cの順に書かれてたら、
Aが終わってからBをはじめて、
Bが終わってからCをはじめるってことですね。
前の人のめちゃウマフラペチーノができるまで僕のホットコーヒーはこないってことですね。
非同期処理
処理を別々にやる。
Aが終わるのをまったりしない。
前の人が頼んだウマウマフラペチーノよりも僕のホットコーヒーの方が作るの簡単なので、ウマペチーのよりもはやく提供されるってことですね。
Pythonで書くなら?
Pythonの並列・並行処理サンプルコードまとめ
Pythonにおける非同期処理: asyncio逆引きリファレンス
あざした!