前回はキャッシュ——よく使うものを手の届くところに置く、置き場所の話をした。手元は速くて狭い、遠くは遅くて広い。そこまでが前回だ。今回は、置き場所ではなく順番の話をする。流しに食器が積まれる、洗濯物が溜まる、ボタン付けが何ヶ月も後回しになる。どれも「待っているものの行列」だ。先に来たものから片づけるのか、最後に積んだものから片づけるのか、急ぎから割り込ませるのか。コンピュータはこの行列に一つ名前を付けている。キューという。
断っておくと、今日は「順番」の話に絞る。たくさん入るか、手元にあるか——量や近さの話は前々回・前回でやった。混ざりやすいので、量の話に滑りそうになったら、その都度断って通り過ぎる。第3回のテーマはキュー。洗濯かごと、流しの食器と、アイロン待ちの山で考える。
シマダ まず一番素直な順番から。先に入れたものを、先に出す。これをFIFO——First In, First Out、先入れ先出しといいます。コンピュータでいえば、プリンタの印刷待ち。先に押した人の書類が先に刷られる。割り込まれたら腹が立つでしょう。あれが守られているのはFIFOだからです。レジの列も、券売機の列も、人が並ぶ列はだいたいこれです。
シマダ 家でいちばん分かりやすいのは、冷蔵庫の牛乳です。手前に古いの、奥に新しいのを入れて、手前から飲む。先に買ったものから先に出す。食品のローテーションと呼ばれるあれが、まさにFIFOです。順番を守らないと、奥で一本だけ期限が切れる。
マキノ 部屋割りの基本は、それです。チェックアウトの早い順に回す。先に空いた部屋から入る。十五部屋持っていて、九時に出た部屋から順に、です。
シマダ きれいなFIFOですね。
マキノ 基本は、です。崩れるのは、フロントから連絡が入るときです。「七階のこの部屋、次のお客様が十二時に着く」と来る。そうしたら、まだ前のお客様が出てない部屋を飛ばして、そこを先にやる。割り込みです。だから純粋に空いた順、っていう日はあんまりないですね。
シマダ その割り込みが、あとで大事になります。先入れ先出しが崩れる理由が、家事には必ずあるので。
シマダ FIFOの逆があります。後に入れたものを、先に出す。LIFO——Last In, First Out。コンピュータではスタックと呼びます。皿を積み上げる、あの積み方をそのまま想像してください。上に載せる、上から取る。だから一番下の皿には、永遠に手が届かない。
シマダ 家にある山は、ぜんぶこれなんです。洗い物の山、洗濯物の山、読みかけの郵便物の山。山にした時点で、上から取ることが決まる。つまり——山にした時点で、一番古いものを一番後回しにする決定を、自動でしている。誰も「底のを後回しにしよう」と決めてないのに、積んだ形が勝手に決めてしまう。
マキノ アイロン待ちが、まさにそれです。うちの。脱いで「これはアイロンいる」ってやつを、椅子の上に重ねていく。上に置く、上から取る。一番下に、夫のワイシャツが一枚あるんですけど。
シマダ それは、いつから底にあるんですか。
マキノ たぶん、二月くらいから。今が六月なので、四ヶ月。上に新しいのが載るたびに、底に押し込まれていく。取り出されることが、構造上ないんです。
シマダ LIFOの底は、忘れられるための場所なんですね。新しいものが来るほど、底は遠くなる。
シマダ FIFOは来た順、LIFOは積んだ順。でも家事の現実は、たぶんどっちでもない。来た順でも、積んだ順でもなく、重要度の順で出す。これを優先度つきキューといいます。列に並んでいても、急ぎが先に出ていく。
シマダ 「先に来たから先に」じゃなくて「明日の朝に弁当が要るから、これを先に」。タスクが入ってきた順番じゃなくて、締め切りや重さで順番が決まる。さっきマキノさんが言ったフロントからの割り込みも、これですよね。「十二時着」という締め切りが、空いた順を追い越す。
マキノ 頭は使いますけどね。連絡が入るたびに、いまの順番のどこに差し込むか、その場で考える。「これとこれ、どっちが先か」を一日に何回も。
シマダ そこなんです。優先度つきキューには、隠れた手間がある。出すたびに「どれが一番大事か」を比べないといけない。この比べる手間そのものがコストなんです。FIFOなら考えなくていい。来た順に出すだけ。優先度をつけた瞬間、毎回考える仕事が増える。
マキノ 全部「急ぎ」になると、考えるだけ無駄になりますよ。「これも今すぐ、それも今すぐ」って言われたら、結局フロアの端から順にやるしかない。急ぎが全部なら、急ぎじゃないのと同じです。
シマダ 前回の言い方で言うと——全部最優先は、優先度なしと同じ。優先度は、つけないものがあって初めて効く。全部に「一軍」の札を貼ったら、札の意味が消える。前回の調味料と、同じ話なんです。
シマダ 優先度つきキューには、影があります。急ぎから出していくと、急ぎじゃないものが、いつまでも出てこない。前のものが片づく前に、もっと急ぎが入ってくる。すると、優先度の低いタスクは永遠に順番が回ってこない。これをstarvation——飢餓、と呼びます。列にいるのに、出口に辿りつけない。
シマダ ボタン付け、裾上げ、写真の整理。これは「急ぎじゃない」が確定しているから、毎回ほかに抜かれる。「いつかやる」と言ったものは、たいてい飢餓状態のキューです。出口のない列に、ずっと並んでいる。並んではいるんです、消えてはいない。ただ出られない。
マキノ さっきのワイシャツが、それですね。急ぎじゃないから、四ヶ月。
シマダ コンピュータには、これを防ぐ仕掛けがあります。エイジングといって、待った時間ぶん、優先度を少しずつ上げていく。長く待ったものは、だんだん前に繰り上がる。最後には必ず順番が来るようにする。
マキノ 家でやるなら——三回見送ったら、次は先頭、とかですか。
シマダ 理屈ではそうです。三回後回しにしたものは、四回目は無条件で先頭に上げる。そういうルールを家に持ち込めば、底のワイシャツも、いつかは出てくる。
マキノ 持ち込めば、ね。でもうちは持ち込んでないので、四ヶ月底にあるんですよ。仕掛けを知ってるのと、自分の家でやるのは、別の話なので。
シマダ ……前回の鍵と、同じことを言われている気がします。
シマダ ここで、列そのものの長さを見ます。コンピュータには行列を扱う理屈があって、入口の話と出口の話で考えます。ものが入ってくる速さを到着率、片づける速さを処理率という。単純な話で、到着率が処理率を上回ると、列はどんどん伸びる。追いつかないんだから、伸び続けるしかない。
シマダ 第1回で、流しに食器が溜まる話をしました。あれは根性が足りないんじゃないんです。入ってくる速さが、片づける速さを超えているという信号です。列の長さは、能力の問題じゃなくて、入口と出口の差を映している。溜まっているという事実だけが、淡々と差を教えている。
マキノ 差を縮めるなら、二つしかないですよね。入ってくるのを減らすか、片づけるのを増やすか。
シマダ まさにそこです。到着を減らすか、処理を増やすか。家でやりやすいのは、たぶん到着を減らすほうです。食器の総数を減らせば、溜められる上限が下がる。
マキノ ホテルの客室、皿が四枚しかないんですよ。カップが二つ、皿が二枚。それだけ。
シマダ 四枚。少なすぎませんか。
マキノ わざとです。多いと、お客様が全部使って、全部流しに置いていく。四枚なら、四枚ぶんしか溜まりようがない。溜まる上限が、最初から決まってる。掃除の側が楽になるように、置く数で決めてあるんです。
シマダ 到着率を、物の数で天井に押さえているんですね。もう一つ、処理を増やすやり方もある——食洗機で何枚もまとめて洗う、みたいな。ただ、それは「並べていっぺんに」の話で、今日の順番の話からはみ出す。覚えておきます。
シマダ ここまで、列は溜まる・後回しになる・飢える、と悪い話ばかりしてきました。でも、キューには真逆の顔もあるんです。列があるおかげで、今すぐやらなくていい。これをバッファといいます。入ってくるものを、いったん溜めておく場所。溜められるから、入る側と出す側が、同じ速さで動かなくて済む。
シマダ 洗濯かごが、まさにバッファです。もしかごがなかったら、靴下を一足脱ぐたびに洗濯機を回すことになる。脱いだそばから処理しないといけない。かごがあるから、溜めておいて、量がまとまってから一回で回せる。列が、入口と出口のあいだの緩衝材になっている。
マキノ リネンも同じです。シーツ、一枚出るたびに洗ってたら回らない。一日ぶん溜めて、まとめて下に出す。溜める場所があるから、各部屋は「とりあえずここに」で先へ進める。
シマダ 溜めて、まとめて、一回で。これは並べていっぺんに片づける話の入口で、さっき食洗機で言いかけたのと同じ方向です。ただ、これも今日の順番からは外れる。次回以降に。
マキノ 悪者にされがちですけどね、溜まってる山。あれが無いと、一個ずつ相手しないといけなくなる。それはそれで、一日終わらない。
シマダ 列は遅延の象徴に見えて、実は「あとでまとめて」を可能にしている。溜まること自体は、罪じゃないんですね。
シマダ 今日いろんな列を見てきました。FIFO、LIFO、優先度、飢餓、バッファ。でも家の中の待ち行列は、たぶんそのどれでもない。レジの列みたいに、律儀に一列には並んでくれない。
マキノ 洗濯物って、かごの中で順番なくなりますよね。先に入れたのも後から入れたのも、混ざって、どれが先かなんて分からない。アイロンの山は逆で、上から取るって順番だけは決まってる。決まってるけど、底は出てこない。
シマダ かごでは順番が溶けて、山では底が忘れられる。どっちも、列としては壊れている。
マキノ 壊れてますね。さっきのワイシャツ、二月から底にあるって言いましたけど。あれ、たぶん今日帰っても、出さないです。底にあるのは知ってる。四ヶ月だってことも、いま数えて分かった。分かったうえで、たぶん今夜もその上に、別のを一枚載せます。仕掛けがあるのも、三回見送ったら先頭に上げればいいのも、聞いて分かりました。分かったから出す、にはならないんですよ。山ってのは、そういうところです。
第4回はスケジューリングを取り上げる。今回が「並んだものをどの順で出すか」の話だったとすれば、次は「誰が・いつ・何をやるか」を割り当てる話だ。順番に手番を回すラウンドロビン、間に合わせるべき締め切り(デッドライン)、進行中の作業を中断させる割り込み——家事の分担と段取りに、その語彙を当ててみる。
#4 誰が、いつ、何を——スケジューリング(近日公開)
#1 コンテキストは流しに溜まる/#2 一軍は、コンロの脇に
「家事のコンピュータサイエンス」は、シマダ(AI使用法研究者)とマキノトモエ(ホテル客室清掃員22年)の対談シリーズです。コンピュータサイエンスの基本概念を一つずつ取り上げ、掃除・洗濯・炊事・買い物・名もなき家事に当ててみる。効率だけでなく、快適さ・分担・諦めも等価に扱います。生成エッセイの現在地に戻る。