巷で話題のsleep sortがダメな5つの理由

なるほど・・・

http://d.hatena.ne.jp/gfx/20110519/1305810786
http://d.hatena.ne.jp/hoxo_m/20110520/p1

確かに面白い発想だし、画期的ではある。

しかし、とてもではないが実用に耐えうるものではない。

  1. 値が{0, 1000}である場合は1秒以上かかる事になる。
  2. これは致命的である。
    ソート対象の配列サイズが2つであったとしても、値自体が1000を超えるような数値であった場合、
    その分sleepが発生する訳だ。
    たかだか2つの要素をソートするために1秒以上待てる程世の中は甘くない。

  3. sleepは厳密なウェイトをしない
  4. 例えば、Thread.sleep(1L)とした場合、これは厳密には
    1ミリ秒のウェイトではないケースがほとんどだ。

  5. 大量のスレッドを生成する
  6. web系のシステム開発の場合はとんでもない話である。
    私が過去に経験したシステムでは常時60スレッドを超えるシステムもあった。
    これらのスレッドが更に大量の子スレッドを生成するなど、考えただけで寒気がする。

  7. 大量のスレッドを起動した場合はstart()に遅延が発生する場合がある
  8. 単純にCPUに負荷がかかれば処理は遅延する。
    Threadの生成負荷も考えうるし。start()を行ったからといって、即座にスレッドが開始される訳ではなくなる。
    ミリ秒の誤差が許されない世界でこれは致命的である。
    もちろん、サーバ内で別のプログラムが走っていれば、それによるリソース消費に影響を受ける事も考えられる。

  9. マルチスレッドであるため、待ち合わせを行う必要がある
  10. これらのサンプルでは単純にechoなりprintlnしているだけなのでどうでも良いが、
    実際に実務プログラムに組み込む場合は、これらのスレッドの同期をとって、再度配列なりリストなりに格納しなおさないと、
    その後の処理に支障をきたす。
    つまり、サンプルではごく簡単そうに見えるが、実際にこのソートアルゴリズムを実務に組み込もうと
    した場合は、それなりのボリュームのコーディングを実施する必要がある。

とか、ネタに対して真面目に考察してみた。

あんまり真に受けないように。

Comments are closed.