人生におけるタスク管理とデッドロック

投稿者: yasushi_cohi 投稿日:

Advertisements
Pocket
LINEで送る

よくビジネスの現場ではタイムマネジメントが大事だぁ、だからタスクを管理しようおっおっおっとか言われていますが、コンピュータの世界にもタスク管理は存在します。

そして、パソコンを見てもらったらわかると思いますが、タスク量はえげつないほど膨大です。
ミリ・マイクロ秒の世界で、目まぐるしくタスクをこなしていきます。
コンピュータの脳といわれる部分が、あるルールに沿って命令をこなしているわけですね。

 

しかし人間は不器用なもので、だいたい一つのことにしか集中できません。

そうやっていろんな雑事に追われたり、やりたいことをどんどん増やしたりしてるうちに、ある日、八方塞がりで何にもできない状態に陥っていしまいました。できないというより、何にもしなくなる感じ。

 

それがなんか、デッドロックみたいだ、と感じました。

 

そんなデッドロック感に浸る中、いろいろ現実と繋がる部分があるなぁと思いました。

 

 

ひとりで考えたので、聞いてください。

 

 

まずは(ワイの)おさらい

Advertisements

タスクの状態遷移

タスクには三つの状態がありまして、

 

・実行状態(Run

・実行可能状態(Ready

・待ち状態(Wait

 

です。

これらの状態を行ったり来たりします。

たとえば、タスクAをやっているときに、タスクの優先度が高いタスクBが出てくれば、タスクAをやめてタスクBに取り掛かります。

タスクを切り替えることをプリエンプションと言いますが、どうでもいいですね。

 

ちなみにコンピュータでは、待ち状態からすぐには実行へと行けず、一度実行可能状態になる必要があります。

追いやったタスクを始めるには、もう一回準備したりするのがめんどくさかったりしますよね。そんなところが実行可能状態に似てるなぁって思います。

あるいはモチベーションをなくしたタスクをもう一度始めるには、環境とかを整えてあげると案外実行しやすくなったりするところとか。

 

 

 

タスクの順番(タスクスケジューリング)

 

複数のタスクがあったとしたら、どうしますか。

優先度決めたりすると思います。

コンピュータにもいろいろやり方があります。

以下が代表的なものです。

 

・到着順方式

・優先度順方式

・動的優先順位方式

・ラウンドロビン方式

・処理時間順方式

・多重待ち行列方式

 

 

なかなか、これは現実でも使えそうなものがありますね。

また順番待ちしているタスクを管理するのは、ディスパッチャという管理プログラムです。方式に応じて、タスクを割り振っていきます。

 

 

割込み処理

コンピュータの世界にも、今やっているタスクをいったん置いといて、別のタスクが終わってからまたそれに戻る、というのがあります。

俗にいう急用が出来るってやつです。

これも現実でもよくあることなので書いときました。

 

 

 

Advertisements

デッドロック

今回のキーワード。

複数のタスクが同じ資源の確保を要求して、お互いに待ち状態になること。

 

排他制御が絡んで来たりケースによっていろんな説明があったりで困るんですけど、大まかにいうと、「身動きが取れなくて何もできなくなる状態」の認識で大丈夫です。

 

 

 

いっぱいタスクを増やしたら、デッドロックになった。

 

ここ最近、勉強したい、運動したい、遊びたい、ブログ書きたいなど、あれやこれやとやりたいこと(タスク)をいっぱい増やしていったら、むしろ身動きが取れなくなってしまいました。

 

アマゾンプライムで映画を眺める日々だったり、だらだら漫画を読んだり、などなど。

(ひどいときは恋愛映画を三本続けて見ました。
内訳:500日のサマー、If I stay、ハッピーエンドが書けるまで
全部よかったです。)

 

ということをずっと昔から繰り返してきて、この何にもできなさはなんなんだろー、と思ってました。

そんな時に落合陽一氏がtwitterで「デッドロックだ」とかなんとかおっしゃってるのも関係したのか、

 

 

「ああ、デッドロックだ・・・」

 

って思いました。

 

 

 

人間がタスクをするのに必要なリソースは、時間や体力です。

 

 

数少ないリソースを、多くなってしまったいろんなタスクたちが要求しているから、むしろ身動きが取れなくなってしまったのでは?と思いました。そしてそれは、タスクの順番も無茶苦茶で、別のタスクに割込みされたり、優先度も考えず与えるリソースを無秩序にロックしてしまった結果なんだと、感じました。

 

 

しかし、そう考えると、また切り口も変わるんじゃないか。

 

 

たとえば、ディスパッチャを見直してみるとか。

人間は機械と違って、その時その時にタスクの割振り方式が違います。というより、方式を意識せずに、軸を持たずにタスクに取り掛かってることが多いです。なので、ディスパッチャという名の実行順序を考えるといいかもしれません。

到着順にやってもいいし、優先度を考えるのでもいいし、それぞれに同じ時間を与えてもいい。

 

 

他には、セマフォという排他制御の考え方があったりしますが、ちょっと思いつかないので割愛。

 

もう少し考える余地がありますね。

 

 

 

 

とまぁ、コンピュータのタスクスケジューリングが、もしかしたら現実の人生に応用できるんじゃないかと(ていうより、コンピュータ自体が人間の脳とかをベースにしてると思いますが、なんていうんでしたっけそういうの、温故知新?的な何か)いう記事でした。

 

 

みなさんもデッドロック感を味わったら、考えてみて下さい。

ITっぽいことを書きました、いえい。

 

Pocket
LINEで送る


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください