ドナドナされるプログラマのメモ

Windows用アプリのプログラミングメモ

mozjpegをつかった画像変換ソフトの開発 その3

画像ファイルのロード、変換、保存をする部分の構造はどうしようかなあ。最近のPCはCPUのコア数が多いので、できればマルチスレッド対応としたい。その場合、どういうプログラム構成とすればいいのだろう?

データ処理の流れはシンプルだ。

  1. 二次記憶からデータを読み出す。
  2. CPUにて処理する。
  3. 二次記憶にデータを書き出す。

1. の二次記憶からデータを読み出す処理は、下手に複数スレッドにて同時処理すると特にHDDで遅くなる可能性がある。また、3.の処理との同時実行も却って遅くする恐れがある。しかし一方で、異なる物理ドライブに対する同時アクセスならば問題ない。

ということは、読み込み・書き出しを管理するクラス(CIOManager)を用意して、同一の物理ドライブに対する同時アクセスを制限しつつ並列化すればいいのかな。んで、読み込めたファイルからどんどん2.のCPU処理(CCodec)に投げて、処理し終わったデータはCIOManagerに投げて書き込ませる、と。つまり、以下の図みたいな感じかな。

f:id:donadonasan:20200203000216p:plain

ソフトウェア構造

けっこうコーディング量がありそうだな、これ。