【1061:30】Linuxでマルチスレッド
- 1 名前:名無しさん@お腹いっぱい。 :2000/12/03(日) 21:46
- を使って書いてる人いらっしゃいますか。
Linuxだとマルチプロセスのプログラムが多くてスレッドを使っている 例はあまり無いようですが、何か不都合があるのでしょうか。 マルチプロセスで性能が出ないならマルチスレッドにすれば良いか と考えるところですが、使っている人があまりいないようなので 使って良いのか不安です。 ちなみに、当方Linuxには詳しくありません。 識者の方、よろしくお願いします。
- 21 名前:8 :2000/12/04(月) 01:31
- PthreadにはWin32のWaitForMultipleObjects()のような便利な物は
ない上に、SysV IPCなんて使うと、そいつの為だけに待ち合わせ スレッド起こす羽目になって、非常にいらいらする。 基本的にPthreadってほんとにbasicな所しか管理してくれないので、 Win32のEventみたいな物が欲しければ自分で実装しなきゃいけなくて 面倒くさい。 で、やっぱり面倒くさいと思う奴は他にもいるようで、GNU Pthという threadライブラリでは、thread間でメッセージ使って同期取るとか、 色々面白い機能が付いてる。 ただ、Pthはノンプリエンティブマルチスレッドなんだよな。自分でyeild() するか、Pthが皮を被せているselect()@` read()等のシステムコールを 呼ばないとスレッドが切り替わらないので、その辺意識してコード書かない といけない、というのがちょっとね。 まぁそのかわりライブラリがスレッドセーフでなくてもおっけー、という メリットもあるんだけど。
- 22 名前:名無しさん@お腹いっぱい。 :2000/12/04(月) 01:39
- というわけでマルチプロセスで再検討するというのはいかがでしょう。
土俵が違うことですし。
- 23 名前:名無しさん@お腹いっぱい。 :2000/12/04(月) 05:38
- Linux の mozilla を起動すると同じメモリ使用量の
プロセスが大量にできて@` 96M しかない僕のマシンでも みかけ上 300M 近く使っているように見えます. これが clone() とかマルチスレッドの例ですか?
- 24 名前:名無しさん@お腹いっぱい。 :2000/12/05(火) 12:25
- >>23
デマンドページングとかモロモロのおかげである
- 25 名前:1 :2000/12/06(水) 00:13
- POSIX threadの場合は、提供されているタスク間通信手段を使ってより抽象度の
高い通信手段を自作してから、それを利用してAPを書くのが良さそうです。 SystemV上でもそのようなことはしていましたが、POSIX threadの場合は不可避 となりそうです。これは本を参考にしてみます。 多面待ちが用意されていないのは不便そうですが、何か重要な理由があって外した のかもしれません。 どうもありがとうございました。
- 26 名前:名無しさん@お腹いっぱい。 :2000/12/08(金) 12:57
- age
- 27 名前:名無しさん@お腹いっぱい。 :2000/12/10(日) 00:12
- >>25
多面待ちって、condition variableを待ってる連中を全員broadcastで起こす とかいう話ですか? 外してたらごめんなさい。pthreadのAPIは primitiveだけど、複雑な同期をこれを元に実現する手段は全部 揃ってるはずなので。 あと、抽象度高い通信、同期機構を..というのは全くおっしゃる 通りだと思います。 あと、書籍としてはこれまで紹介されてたの以外だと、 D.Butenhof氏のPOSIXスレッドプログラミング(翻訳版で読みました@`www.aw.com) が深くてよいです。DECのスレッド実装に長く関わられた方だと聞いてます。 comp.programming.threadsでもよく質問に答えられています。 あと、一般にプロセス間の通信という観点でみるには、 UNIX Network Programming の2版のVolume2も良いですよ。翻訳も前に 出てたはず。POSIX IPCやPOSIX thread@`SystemV IPCの解説、比較があります。 マルチスレッドでなくプロセスの方が良いケースが多いこともわかりますし。 上記の本を読んで、ここ2年くらいSolarisでプログラムしてますが、 時々、Linuxスレッドも触ると、あれもない、これもない状態で、 結構苦労しますね。苦労しないように貢献しないといけないのですが...
- 28 名前:1 :2000/12/10(日) 01:08
- 紀伊国屋から「Pスレッドプログラミング」が届きました。
この本の内容は、4年位前に読んだASCIIから出ていた本(もう手元 にありません)に良く似ています。調べてみると・・著者・訳者が同 じです。もしかして出版社が変わったとか。 私が「多面待ち」と書いたのは、この本の「第7章 複雑な同期」 の「複数待機セマフォ」(P117)に相当する機能です。 ここには、以下の記述があります。 「Win32では、(a)同期変数の集合の1つ、あるいは、(b)その集合の 全てを待つことが可能です。POSIXでは、別の方法でプログラムを書き ますし、複雑な条件で待機する条件変数があります」 私の意図は(b)で、行いたいのは以下です。 (1)複数の条件変数のうちどれかがシグナル状態になったら待ちが解ける。 待ちが解けた直後に、どの条件がシグナル状態となったのかを調べて 分岐する。 mutex×1 + 条件変数×1 + ビットセット の組をクラスでラップすれ ば同様のことは実現できそうですが、「POSIXでは別の方法で・・・」 が気になります。 ITRONでもビットマスク待ちはあるのにPスレッドにないのは、他の やり方を採用することにメリットがあり、それが推奨されているから なのかと考え込んでしまいます。
- 29 名前:名無しさん@お腹いっぱい。 :2000/12/11(月) 06:14
- Linuxで沢山スレッドを立ててpsで見ると同じコマンドの
プロセスがずらーっと並んで気味悪くありません?
- 30 名前:名無しさん@お腹いっぱい。 :2000/12/11(月) 10:46
- 現状のLinuxのPスレッドどうよ?
Vine2.0でスレッドの個数によっては 待機から永久に目覚めないスレッドが できたりして怪しいよ。 フリーソフトのソースでも createとjoinしか使ってなくて glibc2.xに注意とかコメントが目に付くし。
|