« マルチスレッド貧乏性(3) | Main | マルチスレッド貧乏性(5) »

December 13, 2016

マルチスレッド貧乏性(4)

マルチスレッド大好きSEやプログラマを存分にコケにしたあとで、そもそもスレッドって何だろうという基本に立ち返ってみる。

もともとスレッド(タスク)というのは、通信システム(交換機、パケット轉送裝置など)やオペレーティングシステム(OS)が必要な處理を實行して餘ったCPUタイムを割り當てるものだ。OSが自分の處理を後囘しにして、タスクにCPUを明け渡すなどということはあり得ない。それこそまさに本末轉倒。OSがちゃんと動けていないのにタスクがちゃんと動けるはずがない。つまり、タスクとはOSという掌の上で踊っているカスみたいなものだったのだ。私がシステム開發に關わるようになった頃、コンピューターのCPUi80286とかMC68000だった頃はまさにそういうイメージだった。

當時周圍でよく話題になったのが「プロセスとタスクの違いとは何だ?」だった。そして「プロセスとタスクって同じようなものなんですよ」などと、人を小バカにしたようなことを言う若造が多かった氣がする。その頃ターゲット環境とされていたUNIX(なぜがSystemV系が多かった)には、ほとんどの場合タスクが實裝されていなかったので、今思えば無理もないかもしれない。また、システム實裝を檢討する初期段階では、ターゲットマシンもOSも決まっていないことがあるので、プロセスがどうでタスクがこうだみたいなレベルまで想定できないことが多い。

「プロセス⊇タスク」(プロセスはタスクを包含する)というイメージが分かり易いのではないかと思う。プロセスとはリソースの單位であり、タスクとは實行の單位である。プロセスはプログラムの實行に必要となるすべてのリソースを持つが、タスクはプログラムを實行する際のスタックとCPUレジスタの退避領域しか持っていない。プロセスからタスクを引くと、プログラムコード、グローバル變數領域、ヒープ領域ということになる。これが私の長年のイメージであるが、こういう話はちょっとしたことで誤解を招くことが多いので、なかなか深いところまで語るのがむずかしい。正直言って、一緖に開發してきた連中との閒でも、こういう話で盛り上がれることはほとんど無いと言っても過言ではない。しかし、こんな大事なことを曖昧にとらえていて、それでシステムを上手く設計し、品質の良いプログラムを書けると思ったら大閒違いだ。

さっき、タスクとはメインシステムが使ったCPUの殘りカスを使用する、と書いた。タスクはメインシステムの邪魔にならないようにしか動けないので、タスクが動いている最中にメイン處理に何らかの要求が發生すると卽座に割込まれる。むかし開發していた通信システムでは、メイン處理はすべて割り込みから地續きで動いており、割込みが發生すると障害割込み以外すべてマスクして、最優先で處理を實行する。メイン處理が動いている閒は基本チックの周期割込みもマスクされており、そこから起動されるタスクも全く動くことが出來ない。當時のシステムでは5ms周期で割り込みが發生しており、そのとき運良くメイン處理が動いていなければ、そこで初めてタスクが起動される(または中斷させられていたタスクがレジュームする)。よって、タスクとして動かす處理はシステムの中で眞にどうでも良い低優先度の處理だけだった。

コンピュータ上のシステム實裝がそのようになっていたので、システム性能=ハードウェア性能と考えることが出來、さらに性能を設計することも出來た。しかし現在はどうだろう。ほとんどのシステムはUNIXLinux)やWindowsのようなOS上で、いつでも簡單に割込まれる殘りカスのCPUタイムを使って動くことを餘儀なくされている。これで嚴しい性能要件を出されたり、サイジングに無駄は許さんと言われたりしても無理があるだろうと思うが、往々にしてそういう無理がまかり通っており、その都度開發者は苦心することになる。

|

« マルチスレッド貧乏性(3) | Main | マルチスレッド貧乏性(5) »

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/64621610

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

« マルチスレッド貧乏性(3) | Main | マルチスレッド貧乏性(5) »