No.59: 作業負荷の種類による並行処理の影響を理解していない
プログラミングにおいて、作業負荷の実行時間が制限される場合。
CPUの速度: CPUバウンド
I/Oの速度: I/Oバウンド
利用可能メモリの量: メモリバウンド
ワーカープール・パターン(worker-pooling pattern)
固定サイズのワーカー(ゴルーチン)のプールを作成する。
各ゴルーチンは、共通のチャネルからタスクをこのプールに受信する。
作業負荷がCPUに依存している場合、GOMAXPROCSに依存するのがベストプラクティス。
GOMAXPROCSは実行中のゴルーチンに割り当てられるOSスレッド数を設定する環境変数。デフォルトでは、論理CPUの数に設定されている。
ワーカープール・パターンを実装する際に、CPUバウンドな処理であれば、最適なゴルーチン数は利用可能なスレッド数に近い値。
スレッド数がコア数より少ない場合、ゴルーチンはコア数ではなく、スレッド数だけ生成する必要がある。そうしなければ、一つのスレッドが2つのゴルーチンの間で実行環境を共有し、コンテキストスイッチの回数が増える。
ベンチマークによって仮定を検証する必要がある。