本記事は"Algorithms to Live By: The Computer Science of Human Decisions"のchapter05の要約と所感のようなものです。
Chapter05のScheduling(スケジューリング)についてです、日常的にも多いですよね、やらなければならないこと・やりたいことがいくつもあってそれをどういう順でやっていくのか予定を決めることですね。
これを考える職業すら全然存在しそうですが、コンピュータサイエンティストもこういうことを専門に考える人がいるわけです、彼らはコンピュータ・プログラムが問題を解決する順番を決めるわけです。
スケジューリング問題にはいくつか種類がありますが今回は人ひとりのスケジューリングつまりシングルマシンのスケジューリングについてです。
コンピュータは複数のことを同時にやっているように見えますが実際は一つのことを人間の認知できない速度で切り替えながらやっているのでそう見えるだけでシングルマシンではそうならしいですよ(VMとかは違いそうですよねしらないですけど、、、)。
まず、最初にあるタスクをどうするか。
現時点であるタスクはそのタスクの重さ(処理にかかる時間)、重要さ、締め切りまでの時間が主な優先順位の指標になると思います。
重要な物、締め切りまで時間がないものの優先順位が高いのは共通だと思うのですが、軽いものを先に終わらせる方がクライアントを待たせる時間が短く見えるとありました、確かに。
途中で追加されるタスクにはいくつか対処法があります、最初のクライテリアに合わせて分類、すぐやる、カテゴリ(メール返信とか)ごとに分けてどこかで一括でやる。
タスクを切り替えるコストを考えなければすぐやるが一番効果的なようです。
タスクを切り替えるコストは皆さんも感じたことあるのではないでしょうか。
プログラミングなど特に感じることが多いといわれていますが、一時間半に分けて二日やるより三時間一日でやる方が効率的だと思えたりします。タスクを切り替える(コンピュータサイエンスではコンテクストスイッチという)と前のタスクを頭のメモリキャッシュから少し削除してしまうためどうしても戻ってきたときに前より非効率になります。
そこで決められた時間はためて後でまとめて同じようなタスクを処理する(インタラプトコールシング)などのような手法も考えられるわけです。
この章僕的にすごい期待していたのですが、ほかの章にあった自分的に感動した気づきが少し少なくて残念でした、もう一度読んでみようと思います。
ちなみに自分はタスクスイッチの負荷があるとしても三時間に一回くらい気分を変えないとやっていられないうえに、メールやSNSの返信はソワソワするのですぐ返してしまうタイプです。
これに関しては効率的というよりは自分の気持ちとか自分の中のルールを明文化してそれに従う方がいい気がしてます。
次はベイズルールでした、統計学のほうに近いイメージがあったんですけど(あと難解そう)、、、頑張って読んでみます