非同期通信にたとえればよくわかります。
上司はアプリケーション内の上位レイヤーです。
部下は、ドライバーであり割り込みサービスルーチン(ISR)です。
ある事象が発生したら、部下はすばやく反応します。
サササ
そして、外部世界のこまごました出来事をまとめて、上司に報告します。
上司の反応は遅いので・・・
あぁ~あとで見とくよ。
すまんすまん、会議が長引いた。報告書はまだ見てない。
そうこうしている間にも外部世界では、次々と事象が発生します。
サササノサ
部下はすばやく反応します。上司の机にある、未決、決済済み、差し戻しのハコがキューです。上司は、キューのたまり具合を見て、処理の速度を増減します。
たまったキュー内の仕事をこなしている間、上司の他の仕事は止まります。止まっていますが、部下はキューに次の仕事を積む事ができます。止まる仕事は他部署との打ち合わせや、役員への報告や予算取りなどです。
上司が休憩するのは、ハコが空になったときです。
上司の仕事が速いとどうなるでしょうか。
上司はアプリの上位レイヤーです。部下は、小さなサブルーチンです。
上司は、部下に次々と細かい指示を出します。
あの客のところへ行って注文とって来い。
報告書はまだか、早く出せ。
上司の机には、キューとなるハコがありません。上司は必要なときに必要な書類の提出を部下に指示します。部下は言われてから慌てて書類を作りますが、そんなすぐにはできません。
上司は待ち状態になり、イライラします。
早くしろ、早く出せ。
あれをこ~して、それをあ~しろ。
部下は、上司から指示を受けていないとき、手持ち豚さんで時間を浪費します。
有能な部下は、指示を受ける前にシゴトを済ませて待っていることがありますが、実際に出る指示にずれがあった場合、手戻りとなります。(投機実行のコスト)
上司や部下の能力が同じなら、こなせる仕事の量はおなじはずです。ですが、キューがある場合の方が、待ち時間がないぶん、平均的なスループットは高くなるのです。
キューのあるほうの上司が仕事が遅くて、キューがたまり続けるような場合、問題がありますが、周期的に増減していてある一定以上がたまったままである程度なら、その上司はなかなかのものです。
キューはバッファとなり部下の仕事の量の平準化に寄与しているからです。キューがカラなら、部下の仕事のアウトプットが足りないということなのですから。
ある瞬間のキューのたまり具合だけをみて、上司の仕事が遅いと嘆くのはまぬけのやることだということです。
部下の仕事は、キューの長さがある程度以下に短くなったら、急いで仕事をこなし、長くなりすぎたなと思ったら、早く帰ればよいのです。上司はその逆でよいのです。