[1406] Re:マルチスレッドについて
投稿者:山
2009/07/22 20:46:20
>一応検索はしたのですが、Googleでは普通に非同期処理の記事しか出てこなかった
>ような……
私のほうでは出るのですが…、では「非同期分散処理」という言い方でも
いいかな、「非同期処理」までいくと意味合いがちょっと違うんですよね。
>ここのところが、yieldとかwait()とかの方法ではいけないのかな、というのが
>私の疑問です。
その場合、キュー処理にいろいろ問題が出てくるのです。まず第1に、キューの
優先順位ができない、全部のスレッドに優先順位処理を作りこめばいいのかも
しれませんが、まったく非効率です。次に、キューを送る元と受け側が同期処理
していなければいけない。こえは、たとえば受け側がキューを処理中に、いくつも
キューを送れない。これもまた各スレッドに…。つぎに、受け側がスレッドを
終了した場合、送り元に終了した旨の連絡して止めてもらう同期処理をしなければ、
相手がいないのにキューを送って宙ぶらりんとなる。等々キュー処理には(ぱ)さん
が示したスレッドの関数だけでは無理なことが多いです。
いろいろと作りこめば非同期もできます。しかしそれには、そのスレッド以外
でキューの管理システムを作らなければならないわけで。使用者にその管理部分
を作れと要求しているわけです。その要求をしている言語は「非同期分散処理」
をサポートしているとはいえません。
(作れば何でもできると考えれば、アセンブラでOKってなってしまう)
また、スレッド起きに監視ループが必要になってきますが。私が作りたい
のは何十何百ものスレッドをターゲットに考えているので、そのスレッドの待機
処理時間が馬鹿にならないのです。私の言語は100スレッドあっても、待機時は
負荷0です。
「非同期分散処理」を純粋にサポートしようと思ったら、今のスレッド仕様で
は無理があるのです。C言語でも、OOPの様にクラスやカプセル化のようなことが
出来ます。でもだれもC言語がOOP言語とは言いません。それと同じことを言って
いるように感じます。単純な基本機能があれば、その組み合わせでほとんどの
ことが出来ます。しかし、その言語でできる事をサポートしているとはいえま
せん。
>固定個のスレッドプールを持っているようなので、それを使い切った場合を想定して
>いるのでしょうか? うーん。
いえ、「非同期分散処理」を言語レベルでサポートするためにです。
>脱線しますけど、よく言われるマルチスレッドのメリットで、GUIのスレッドを
>処理のスレッドと分けておけば、ユーザの操作にすぐ反応できる、というのが
>ありますけど、じゃあ重たいページをIEで表示してしまった時、×ボタンですぐに
>停止できるのかというと、さっぱり押せないことばっかりで……
Windowsのメッセージシステム…、あれは同期非同期以前のシーケンシャル
処理システムなんです。1スレッドでメッセージ取り出しループ処理して、メッセー
ジを受け取り、そのメッセージに対応する関数を呼んでいるだけで、並列処理は
していないです。だからその関数が終わらないと次の処理ができないシステム
です。IEの中身がどうなっているかわかりませんが。即応できるシステムを作る
のは難しいと思います。
だからと言って、私の言語は即応かというと、作り方いかんで幾らでも遅く
作れますし、シングルスレッドでも作り方いかんでは早く処理できるし。
マルチスレッドの方が融通は利きますが、その件は本質ではないと思います。
「非同期処理」だとイメージが違ってくるんです。掲示板で説明するのは難しい
ので、作ったソフトを動かしてもらえれば…、ずいぶん先になりますが…。
PS.終了だけを考えれば、私の言語は終了は遅いです。言語上のスレッドの
終了処理、VMスレッドの終了処理、その他組み込みスレッドの終了処理、
それぞれにリソースの開放処理等々、多分重い。
終了は結構大変です。問題なければ1秒以内に終わると思いますけど。
何か問題があって、タイムアウト待ちでもしようものなら。冷汗たらー