Footprints

弁護士・伊藤雅浩による仕事・趣味・その他雑多なことを綴るブログ(2005年3月開設)

スケジューリングアルゴリズム

弁護士の仕事は,こちらが予想しないタイミングで,予想しない分量の仕事が舞い込んでくる。


コンサルタントの場合も,似た部分はあるが,基本的に一定期間において,特定(私の場合,多くても2社か3社,通常は1社)のクライアントに対して専従するので,複数のタスクが積みあがってきたとしても,比較的優先順序は判断しやすい。


しかし,多数のクライアントの仕事を同時並行的に進めなければならないとなると,どの仕事も「急ぎで」「極めて重要」ということになり,スケジューリングに頭を悩ませることになる。


その昔,大学生のころ,計算機アーキテクチャ(要はコンピュータの仕組のこと)の科目か何かで,スケジューリングのアルゴリズムを勉強した。コンピュータにおいても,様々な入出力要求や,演算要求などについて,CPUがどの順番でプロセスをこなしていくか,というアルゴリズムが重要である。


プリミティブな考え方として,原価計算などでも使われる概念のFIFOLIFOがある。FIFO先入れ先出しなので,とにかく来た順番に仕事をこなしていくというもの。これだと,特急案件には対応できないので,現実味は薄い。現実の仕事においては,Shortest Remaining Time,すなわち,もっとも少ない時間で終わる仕事を先にやってしまう,ということも多い。こうなると,簡単な質問への対応をこなしているうちに,大事な仕事になかなか着手できなかったりする。


Round-Robin方式も結構使えるのではないかと思う。これは,タイムスライス(例えば1時間単位)を順番に各タスクに割り当てていくというもの。優先度をつけた重み付けで割り当てたり,タイムスライスを可変にするなどの応用も考えられる。


結局のところ,優先度や納期,想定所要時間などを一覧化したToDoリストで管理して,仕事が来たらまず一覧に追加し,随時一覧を見ながら,タスクの切り替えを行っていくという方式を取っている。


ただし,現実には,電話やミーティングなどの「割り込み」も頻繁に発生する。まさに今,このブログを書く,という作業も「割り込み」なので,さっさと書き終えて仕事に戻らなければならないのだが・・