仕事に効くコンピュータサイエンス
待ち時間を設計する — I/Oと非同期読了目安 10分

手が止まるのはどこか — CPUバウンドとI/Oバウンド

1日のタスクリストを眺めて、「今日は忙しかったのに、なぜか進んだ気がしない」と感じたことはないでしょうか。忙しさの中身を分解してみると、実は多くの時間が「誰かの返事待ち」で占められていた、ということがよくあります。自分の作業のどこが「頭を使う部分」で、どこが「待つだけの部分」なのか。この区別が付けられるかどうかで、1日の組み立て方は大きく変わります。

CPUバウンドとI/Oバウンドという分け方

コンピュータの世界では、プログラムの性質を大きく2つに分けます。1つは、計算そのものに時間がかかり、CPU(計算を実行する部品)がずっと働き続けるタイプの処理です。これをCPUバウンド(計算量が処理時間を決めている状態)と呼びます。動画のエンコードや大量データの集計のように、答えを出すまでひたすら計算し続ける処理がこれにあたります。

もう1つは、計算そのものはすぐ終わるのに、外部とのやり取りに時間がかかるタイプの処理です。これをI/Oバウンド(入出力の待ち時間が処理時間を決めている状態)と呼びます。ファイルの読み書き、ネットワーク越しの問い合わせ、他のプログラムからの応答待ちなどがこれにあたります。I/Oバウンドな処理では、CPUはほとんど仕事をしておらず、ただ返事を待っているだけの時間が大半を占めます。

この2つの見分け方は、原理としては単純です。「CPUを働かせ続けているか、それとも待っているだけか」を見ればよいのです。同じ「処理に5分かかるプログラム」でも、その5分間CPUがフル稼働しているのか、それとも4分50秒は外部からの返事待ちで、実際の計算は10秒しかしていないのかでは、中身がまったく違います。後者のようなプログラムをいくらCPUの性能を上げて高速化しようとしても、無駄になってしまいます。ボトルネックは計算ではなく待ち時間にあるからです。

なぜこの区別がコンピュータの設計において重視されるのかというと、対策がまったく違うからです。CPUバウンドな処理を速くしたければ、計算の手順そのものを見直すか、より高性能なCPUに交換するしかありません。これは5章で扱う計算量の話につながります。一方、I/Oバウンドな処理を速くしたければ、CPUをいくら強化しても意味がなく、通信経路を見直す、待っている間に他の処理を並行させる、といった別のアプローチが必要になります。原因を取り違えると、対策そのものが的外れになってしまうのです。

仕事に翻訳すると

この区別を仕事に当てはめると、「頭バウンドな作業」と「他人バウンドな作業」という言い方ができます。頭バウンドな作業は、資料の構成を考える、文章を書く、数字を分析するといった、自分の思考力と手元の情報だけで完結する作業です。これらの作業は、時間をかけただけ、あるいは集中力を上げただけ、進み方が変わります。

他人バウンドな作業は、承認、回答、確認、外部からのデータ提供のように、他者や外部の仕組みの応答を待たないと先に進めない作業です。これらの作業でどれだけ自分が急いでも、相手の処理速度以上には進みません。メールを3分で書いても、相手が読んで返事をくれるまでの時間は変わらないのです。

重要なのは、多くの業務が実はこの2つの混合であるという点です。たとえば企画書を作る仕事では、構成を考えて文章を書く部分は頭バウンドですが、他部署に数字の確認を取る部分は他人バウンドです。この2つが1つの業務の中に同居しているために、「企画書作成は3日かかる仕事だ」というように、業務全体をひとまとめにして見積もってしまいがちです。しかし実際には、頭バウンドな部分は集中すれば半日で終わり、残りの2日半は他部署からの回答待ちだった、ということも珍しくありません。

実際のプログラムを観察するときも、この見立ての違いは道具として使われます。ある処理が遅いときに、CPUの使用率を見れば、原因がどちらにあるかがすぐに分かります。CPU使用率が高いまま張り付いているなら、計算そのものが重いCPUバウンドです。CPU使用率が低いまま処理時間だけが長いなら、どこかで応答を待っているI/Oバウンドです。原因の見立てを誤ると、性能改善のためにCPUを増強したのに何も速くならない、という無駄な投資をしてしまいます。

この見立ての違いは、仕事の対策にもそのまま当てはまります。頭バウンドな作業が遅いなら、情報の整理の仕方を変える、集中できる時間帯を確保する、といった自分側の工夫で改善できます。しかし他人バウンドな作業が遅いときに、自分の作業スピードを上げようとしても効果はありません。改善すべきは、依頼の出し方、優先順位の伝え方、相手が返信しやすい形式にすることであり、これは自分の作業スピードとは別の種類の工夫です。この切り分けができていないと、「自分がもっと速く動けば全体が速くなるはずだ」という誤った前提のまま、的外れな工夫を続けてしまうことになります。

具体場面で見分ける

具体場面で見分けてみます。まず問い合わせ対応を例にとります。顧客からの質問を読み、答えを考え、文面をまとめる部分は頭バウンドです。一方、答えるために社内の別部署へ事実確認をする部分は他人バウンドです。この2つを混同して「問い合わせ対応には半日かかる」と捉えてしまうと、半日分の時間をまるごと確保しようとして、結果的に他の作業に手をつけられなくなります。実際には「事実確認のメールを送るまでは10分、そこから先は相手の返信待ち」と分解できれば、10分で送信を終え、残りの待ち時間には別の仕事を進められます

引き継ぎ業務でも同様です。引き継ぎ資料を書く作業そのものは頭バウンドですが、「この処理の意図が分からないので前任者に確認する」という部分は他人バウンドです。引き継ぎが長引く原因の多くは、資料作成そのものの遅さよりも、この確認待ちの積み重ねにあります。だとすれば、確認事項はできるだけ早い段階でまとめて質問し、返事を待つ間は他の部分の執筆を進める、という組み立てが有効になります。

会議調整でも、日程の候補を考える作業は頭バウンドですが、候補を関係者に送って全員の都合が揃うのを待つ部分は他人バウンドです。候補を送った直後にカレンダーに張り付いて全員の返信を待つのは、CPUがI/Oの完了をひたすら見張っているのと同じ、非効率な状態です。

週次報告の作成でも、この2つは同居しています。自分の担当分野の実績をまとめ、コメントを書く作業は頭バウンドです。一方、他部署の数字を待つ、上司のコメントを待つといった部分は他人バウンドです。週次報告を「1つの塊」として捉えて締切前日にまとめて着手すると、他部署からの数字が締切当日にならないと揃わない、という事態に振り回されがちです。逆に、他人バウンドな部分を先に洗い出して早めに依頼を出しておけば、頭バウンドな部分は自分のペースで進められます。締切に追われる感覚の多くは、実は頭バウンドな作業の遅さではなく、他人バウンドな部分への着手が遅かったことに起因しています。

この分解を習慣にすると、日々のタスク管理の粒度そのものが変わります。「企画書作成」「問い合わせ対応」「引き継ぎ」といった大きな塊のまま予定を組むのではなく、その中の頭バウンドな部分と他人バウンドな部分を分けて予定に落とし込むようになります。他人バウンドな部分は、できるだけ早い時間帯に依頼だけ済ませてしまい、頭バウンドな部分は自分の集中力が高い時間帯にまとめて配置する。こうした組み立て方は、特別な道具や仕組みを必要とせず、この区別さえ意識できれば誰でもすぐに実践できます。

落とし穴 — 見た目の忙しさに騙されない

この区別でよくある誤りは、「他人バウンドな時間」を「自分が働いている時間」だと錯覚してしまうことです。返信を待ちながら画面を眺めている時間、承認が来るのを待ちながら何度もメールを開き直す時間。これらは体感としては仕事をしている感覚がありますが、実際にはCPUが何も計算せずに待機しているのと同じ状態です。

もう1つの落とし穴は、他人バウンドな作業を頭バウンドな作業と同じ感覚で見積もってしまうことです。「集中すれば早く終わる」という発想は頭バウンドな作業には有効ですが、他人バウンドな作業には通用しません。相手の返信を早めたいなら、集中力を上げるのではなく、依頼の出し方や優先順位の伝え方を変える必要があります。この違いを混同すると、「もっと急かせば早く終わるはずだ」という誤った期待を自分にも相手にも持ってしまいます。

さらに厄介なのは、他人バウンドな時間を頭バウンドな作業で埋めようとして、かえって全体を遅らせてしまうケースです。たとえば、確認待ちの間に別の重い作業に没頭してしまい、返信が来たことに気づかず数時間が過ぎる、という失敗はよくあります。これは、頭バウンドな作業に集中しすぎたために、他人バウンドな作業の完了を見落とすという、いわば逆方向の混同です。待ち時間の間に何をするかは自由ですが、待っていること自体を忘れてはいけません。この兼ね合いをどう取るかは、次のページと、その次のページで扱うテーマに直結します。

たとえば、他部署への確認と自分の作業を並行して進めているつもりが、実は確認の返事を待つあまり、自分の作業の手が止まっていることに気づかないまま時間が過ぎていた、ということもあります。他人バウンドな時間だと思っていたものが、実は自分の中で頭バウンドな作業として処理できたはずの部分を含んでいた、という見誤りも起こり得ます。だからこそ、作業に着手する前に「これは本当に相手待ちの部分か、自分で進められる部分か」を一度立ち止まって仕分けることに意味があります。

この区別ができて初めて、次に問うべき「では他人バウンドな時間にどう向き合うか」という問いが立てられます。ただ待つのか、それとも別の動き方があるのか。次のページでは、他人バウンドな作業に直面したとき、「その場で待つか、先に進むか」という選び方について見ていきます。

持ち帰り

  • 作業は「頭バウンド(自分の計算力で進む)」と「他人バウンド(相手の応答待ちで進む)」に分けられる
  • 他人バウンドな作業は、集中力を上げても速くならない。速くしたければ依頼の出し方を変えるしかない
  • 1つの業務の中に頭バウンドと他人バウンドが混在していることが多く、分解しないと待ち時間が見えない

やってみる

今抱えている業務を1つ選び、「頭バウンドな部分」と「他人バウンドな部分」に分けて書き出してみてください。他人バウンドな部分がどれだけの割合を占めているかを確認するだけでも発見があります。書き出した他人バウンドな部分については、依頼をいつ出せば待ち時間を最も有効に使えるかも合わせてメモしておくと、次のページ以降の内容がそのまま実践につながります。