history

青木日記 RSS

<前の日 | この月 | 次の日>

2005-06-29

JOJO の奇妙なコンビニ

http://2log.blog9.fc2.com/blog-entry-51.html

> 3 名前:いい気分さん[] 投稿日:2001/01/16(火) 16:22
> 君が立ち読みを止めるまで、僕はポリッシャーをやめないぃぃぃ!

身に覚えがありすぎ。

「(その 1 円玉は) 無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄―――ッッッ!!」

ということも、ないことはない。

コンビニにおける最適化

それで思い出したが、 「コンビニで最適化を説明する」というネタをいつかやろうと思っていたんだ。

  • 命令数の削減

出された金額がちょうどのときは レジで金額を打たずに「客層」ボタンだけでトランザクションを終了できる。

  • 低コスト命令への変換

お客さんが低速な場合、できる限り早い段階で荷物を受け取ってしまうほうが高速。

  • 投機実行

値段が 705 円とすると、500 円玉と 10 円玉を出された時点で 合理的な支払い候補は 710 円に限定される。 したがって、すべての小銭を出し終わる前に値段を打ってもよい。

  • 投機実行の失敗

前項の例において、「あ、すみませんやっぱり 1000 円で」例外により 予測が外れる場合がある。このときは金額を打ち直すか自分で暗算する必要がある。

  • I/O バッファ

品出しのとき、毎回バックヤードまで取りにいっているとレイテンシが許容できなくなる。 かごやパレットを使ってまとめて運ぶのがよい。

  • 誤った最適化技法 (早すぎる最適化)

1. ときどき、一生懸命バーコードを上にして出そうとするお客さんがいるのだが、 店員はバーコードの位置なんてわかっているのでやるだけ時間の無駄である。

2. お金を出すのが遅い人の場合、がんばって小銭を探すより 店員に小銭をたくさん出させたほうが速い。

  • 並列処理とタイムシェアリング

1. 弁当を温めているあいだに次のトランザクションを処理できる。 また、弁当が 2 個以上の場合は複数の電子レンジを使ってよい。 ただし電子レンジは共有リソースなので、排他処理をしておかないと そそっかしい店員がフタを開けてしまって何秒温めたかわからなくなることがある。

2. 品出しとレジ対応はより細かい時間単位に分割して処理できる。 しかし、ゴミのかたづけやジュース補充はコンテキストスイッチの オーバーヘッドが大きいので、できるだけアトミックに処理すべきである。

3. なんらかの理由により支払いの途中で客がレジを離れた場合、 レジの「保留」機能により次のトランザクションを先に処理できる。 しかし一方に宅急便や Fami ポート、クレジットカード支払いなどが含まれる場合は適用できない。 またネストは一段に限定されるので、並列処理できるのは高々 2 トランザクションである。

4. ある程度経験を積んだ店員ならば、 新聞やジュース一本で釣銭が発生しないような単純なトランザクションでは レジ入力を遅延処理できる (別トランザクション中に処理できる → スループット向上)。

5. 宅急便の伝票を書いてもらっている間に次のトランザクションを処理できる。 なお、3 項を考慮すると、 混んでいるときは宅急便の入力をできるかぎり遅延したほうがよいことがわかる。

6. 逆に、店が空いているときは郵便番号と市がわかった時点で入力を開始すると トランザクションを最短時間で処理できる。

  • リアルタイム処理

引き継ぎ処理 (レジのお金を数えること) のときには手順を工夫して レジが完全に塞がる時間を短かくしないとレジのスループットが有意に低下する。 店が混んでいるときにはレジ打ちを リアルタイムプロセス扱いにしたほうがよい (レジが塞がる時間の最長時間を保証するという意味)。

  • 80:20 の原則 (ボトルネックを探そう)

以上のようにせせこましく最適化しても、 トラブルが一発起こるだけでチャラになる。 また、レジ対応はトランザクション数も多く優先度も高いので目立ってしまうが、 トータルで見たときに削減できる時間は少ない。 それよりも、品出しやジュース補充のピーク速度を上げたり、 そのスケジューリングを熟考するほうがよい。

(02:07)

RubyConf

実はいまだに前登録してなかった。 遅ればせながら登録しよう。

(02:39)

逃避活動中 (1)

こんな夜中にネタを書き込めるのもレポートで徹夜中だからでして……。 なんでこう五月雨式に次々とレポートを出すんですか。

……いや、全部同時のほうがキツいよな。

(02:41)

Sun、初のノート型コンピュータを発表

Sun がノートで UltraSPARC III かよ。Solaris かよ。 どうしよう、すげえ欲しくなってきた。

とーぜん RS232-C もついてるし。

ていうか HDD が SCSI ですかっ?! やべーこれはもう笑うしかない。

いくらくらいなんだろうなあ。 UltraSPARC III モデルだと 50 越えちゃう感じですか?

(04:31)

本日のツッコミ(全5件) [ツッコミを入れる]
woods (2005-06-30 15:19)

小銭を出すのが遅い人の場合、最適化オプションがOptimize for size(客のサイフの)になってる場合があります。

ささだ (2005-06-30 20:10)

そこでマルチスレッド化技術デスヨ!(処理資源のボトルネック(人間)があるため意味が無い)

青木 (2005-07-01 03:02)

レジの小銭に関して -Os やられる場合もありますね。
駐車場の金が払えないとか言われてもー。

青木 (2005-07-01 03:07)

分身するのか > スレッド

青木 (2005-07-01 03:09)

もういっこ考えついた

ベクトル演算

ジュースなどを詰めるとき、二本以上同時に詰めることができる。

名前
メールアドレス

<前の日 | この月 | 次の日>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|04|05|06|09|10|
2009|07|
2010|09|

Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved. LIRS