マルチスレッドにすると処理速度が遅くなってしまうパターン
- メモリ使用量が多い
- 処理が重い
- 待ち合わせが発生する
- 外部(DBやファイルなど)から情報を取りに行く
例)
A:60%のメモリを使う
B:80%のメモリを使う
A、Bともに結構メモリを使う
↓
これをマルチスレッドにすると。。。
メモリ使用量が多い
- 処理Aをするためには、メモリに処理Aで使うための情報を持っておく必要がある
→メモリを60%使う - 処理Bを行うためには、メモリに処理Bで使うための情報を持っておく必要がある
→メモリを80%使う - これらをマルチスレッドにしてしまうとメモリが足りない!!
↓
じゃあどうする。。。?
メモリに書き込みができないので、
- 外部のメモリ(HDとか)とかに書き出す
- 不要になったメモリは消す
- 外部にメモリを見に行く
とかの余分な作業が発生してしまい遅くなってしまう
待ち合わせが発生する
- AとBの処理で、1つしかないシステムを使う場合、待ち時間が発生してしまう
(素直に1個ずつ処理をした方が待ち時間が発生せずに早く処理が終わる) - マルチタスクにするには、AとB両方の情報をメモリに持っておく必要がある
そのため、メモリが足りないと、余計に遅延する!!
※メモリとか、CPUのコア数が潤沢ならマルチスレッドの方が早い
しかし、古のコア数1とかのPCや、メモリ容量が少ないPだと並列処理の方が直列処理よりも遅くなってしまうことがある
(今のCPU8コアとかなら、8スレッドくらいならいける)