« たのしい四散新聞 2016/12/10 | Main | マルチスレッド貧乏性(2) »

December 10, 2016

マルチスレッド貧乏性

書こう書こうと思っていて、なかなか書けないこのタイトルの記事。こういうのって、書き始めると頭の中にいろんなことがいっぱい湧いてきて、一氣に發散し、文章を書くどころではなくなる。だから、こういう場合は分かり易い文章を書こうとか、素晴らしい記事にしようとか考えずに、思いつくままにどんどん書いていった方が良いのではないかと思った。もちろん、そこまで開き直って割り切っても、途中で沈沒する可能性はある。

最初にことわっておくが、私はThread(スレッド)を使ってプログラムを書いたことはない。ついでに言えば、別にマルチスレッドを忌み嫌っているわけでもない。

おそらく、現在一般的にスレッドと呼ばれているものは、もともと(私がプログラミングを始めた頃は)Task(タスク)と呼ばれていて、それがやがてUNIXLight Weight Processとして實裝され、その後POSIX Threadになったのではないかと、漠然と認識しているが、このような認識は人によって樣々だろう。今でもLinux上のスレッドにはpidがふられているので、プロセスとして管理されているようなフシがある。

私が今から20數年前に徹夜で沒頭したことがあるのはスレッドではなくタスクの方だ。OSUNIXWindowsではなくCTRON。ただし、CTRONのタスクにも實裝がいろいろあって、ノンプリエンプティブとプリエンプティブがあり、私は運良くその兩方を經驗している。

辛口なSEやプログラマは、プリエンプティブマルチタスクじゃないと意味がないとか?言うのかもしれないが、それはすこぶるナンセンスな話である。眞のプリエンプティブマルチタスク環境においては、任意のCPUインストラクションを實行中にいきなりタスクが切り替わるとイメージして設計し、プログラミングする必要があると考える。しかし、もし本當にそういう動きをしているのであれば、プログラム上のどこでどのプログラムに割込まれても問題ないことをテストする必要があるが、現實問題としてそんなテストが出來るはずがない。だとすれば、そのようなタスク制御の元で動作するプログラムを作ってはいけない、と考えるのが妥當である。もし、そんなプログラムを作ってしまったら、どんなことをしても品質保證など出來なくなる。

こんな笑い話のようなことが現實にある。たとえばWindowsというOSはプリエンプティブマルチスレッドらしいが、新しいバージョンがリリースされると10年閒每月パッチをリリースし續けるという、通常のビジネス開發ではあり得ないようなことを平氣でやっている。そして10年經ってもバグは枯れない(殘存バグがないことを檢證できないという意味で)。その理由は上述のとおりである。

少し卑近な話をすれば、腦がお花畑なプログラマたちがやりたがっているマルチスレッドプログラミングとは、自分のテリトリ(システム上で自分が擔當する機能ブロック、または小規模の場合システム全體)の中で、漠然とココとソコは同時に動かしても良いのではないか?という安易な發想に基づいている。さらに邪惡なプログラマは、自分のテリトリの中に竝行で動かせるものが無いかどうかと必要もないのに探しまわる。

少なくとも、次の事項くらいは考えた方が良いだろう。
①自分のテリトリにあるモジュールは、誰が起動したプロセスのどのスレッドで動くのか。
②自分が起動したスレッドで、誰のプログラムが動くのか。

普通に考えれば、自分のテリトリの中でいくつもスレッドを起動して制御しなければならないようなプログラムなど無いだろう。スレッドを分ける以外に制御する方法が無い場合に限られるのではないか。その證據に、ネットを檢索してもマルチスレッドプログラミングの有效例など皆無と言って良い。

|

« たのしい四散新聞 2016/12/10 | Main | マルチスレッド貧乏性(2) »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/74224/64606672

Listed below are links to weblogs that reference マルチスレッド貧乏性:

« たのしい四散新聞 2016/12/10 | Main | マルチスレッド貧乏性(2) »