なるほど・・・
http://d.hatena.ne.jp/gfx/20110519/1305810786
http://d.hatena.ne.jp/hoxo_m/20110520/p1
確かに面白い発想だし、画期的ではある。
しかし、とてもではないが実用に耐えうるものではない。
- 値が{0, 1000}である場合は1秒以上かかる事になる。
- sleepは厳密なウェイトをしない
- 大量のスレッドを生成する
- 大量のスレッドを起動した場合はstart()に遅延が発生する場合がある
- マルチスレッドであるため、待ち合わせを行う必要がある
これは致命的である。
ソート対象の配列サイズが2つであったとしても、値自体が1000を超えるような数値であった場合、
その分sleepが発生する訳だ。
たかだか2つの要素をソートするために1秒以上待てる程世の中は甘くない。
例えば、Thread.sleep(1L)とした場合、これは厳密には
1ミリ秒のウェイトではないケースがほとんどだ。
web系のシステム開発の場合はとんでもない話である。
私が過去に経験したシステムでは常時60スレッドを超えるシステムもあった。
これらのスレッドが更に大量の子スレッドを生成するなど、考えただけで寒気がする。
単純にCPUに負荷がかかれば処理は遅延する。
Threadの生成負荷も考えうるし。start()を行ったからといって、即座にスレッドが開始される訳ではなくなる。
ミリ秒の誤差が許されない世界でこれは致命的である。
もちろん、サーバ内で別のプログラムが走っていれば、それによるリソース消費に影響を受ける事も考えられる。
これらのサンプルでは単純にechoなりprintlnしているだけなのでどうでも良いが、
実際に実務プログラムに組み込む場合は、これらのスレッドの同期をとって、再度配列なりリストなりに格納しなおさないと、
その後の処理に支障をきたす。
つまり、サンプルではごく簡単そうに見えるが、実際にこのソートアルゴリズムを実務に組み込もうと
した場合は、それなりのボリュームのコーディングを実施する必要がある。
とか、ネタに対して真面目に考察してみた。
あんまり真に受けないように。
Comments are closed.