トップページ⇒linux
26コメント7KB

マルチスレッドについて

■ このスレッドは過去ログ倉庫に格納されています
0001login:PenguinNGNG
Unixで開発したマルチスレッドのアプリを
Linux上で動かすと、どうしても、各スレッドを
プロセスと認識してしまいます。
どうしてなんでしょうか?
0002login:PenguinNGNG
あなたご自身言ってることを理解してから
質問した方がよいとおもわれ
(マルチスレッド分かってない)
00031NGNG
ちなみに開発言語は、C/C++で
posixのpthreadでマルチスレッドを実装してます。
Unix上ではスレッドとして動作してます
0004login:PenguinNGNG
はわわわー
0005login:Penguin NGNG
>>1
試すようで失礼だが>>1の言うマルチスレッドの定義を上げてみよ
0006login:PenguinNGNG
UNIXって具体的に何を指してるの?
00071NGNG
>>5
1つのプロセスに複数の実行単位(スレッド)の処理があり、
スケジューリングにより実行単位(スレッド)が切り替わる
と思ってましたが・・・間違ってるでしょうか?
00081NGNG
>>6
もともとSolarisで開発したものです
0009login:PenguinNGNG
どうやってスレッドかどうかって認識してるんだ?
その情報がないと先にはすすめないだろ。
まあLinuxのスレッドはメモリ空間を共有した別のプロセスだから
プロセスIDとかで同じプロセスかどうかチェックしてるようだと
別プロセス上で走ってるとみなしちゃうよな。
0010login:PenguinNGNG
プロセスとスレッドの違いを教えてください。
forkしたら別のメモリ空間なの?
00111NGNG
カーネルは別のプロセスとして認識していると考えていいのでしょうか?
メモリ空間を共有しているとスレッドと定義されるんですか?
場違いの質問ならすみません。。
0012login:PenguinNGNG
別のプロセスとして認識されてるなら、
killとかするとどうなるんだろうね。
みんな死ぬの??
0013login:PenguinNGNG
死なないですね
0014login:PenguinNGNG
よ〜するにカーネルの実装がしょぼいってことか?
00159NGNG
forkしたら別メモリ。正確に言うとfork直後はメモリはコピーオンライト属性が
ついていて、同じ物理メモリを共有してる。どっちかが書き込みをした時点で
コピーされて別メモリになる。fork後のアロケーションは最初から別メモリが
確保される。
スレッドの場合は同じ物理メモリに書き込まれるだけ。

問題は何をもってしてスレッドと定義するかだよね。
プロセスIDが違う場合は別プロセスと定義すればLinuxのスレッドは
メモリ空間を共有した別なプロセスということになる。
同じメモリを使える最小実行単位と言う定義であるならば、
Linuxのスレッドはまぎれもなくスレッド。
よくLinuxのスレッドの実装はタコだって人がいるけど、俺は別にいいと思う。
最終的な結果は同じだし、パフォーマンス的に劣る部分もない。
スケジューラがスレッドキューを並び替えて同じプロセス上にあるスレッドを
連続的に動かすようなチューニングをしてあればプロセス切り替え時におきる
TLBのフラッシュをなくして、高速化できるんだけど、スケジューラの並び買えで
結局時間が掛かるから、あまりそういうチューニングはしない。
0016login:PenguinNGNG
じゃぁ、Linuxでマルチスレッドのソフトをkillしたいときにはどうするの?
0017login:PenguinNGNG
>>15
POSIX thread と clone との相性が悪いというのが一番の
問題だと思う。移植性を考えてpthread使ってsolやosf1と
同じ感覚でやるとちっとも性能がでない。逆に特性を分かって
スレッドプログラミングすると非常に速い、と。
0018login:PenguinNGNG
>>16
親玉をkillすればいいんじゃないの?
0019login:PenguinNGNG
妙なスレッドで話題になったことがあるなぁ
http://cocoa.2ch.net/test/read.cgi?bbs=linux&key=988860214&st=284&to=302&nofirst=true
0020login:PenguinNGNG
>>18
kill -SAGE
00219NGNG
284は俺と同じ事をいってるね。でもやっぱり煽る奴はいるんだね。
俺はWin擁護派だが(どれくらい擁護派なのかは元オリスレ1だって
言えば分かるかな)、こんなスレッドの実装法の違いで批判するような
ことはしないな。確かに見かけ上タコにみえるから突っ込みやすい部分
ではあるが。Linuxのカーネルにはもっと突っ込むべき部分がまだまだ
一杯あるからちゃんと分かってる人ならこんなとこに突っ込まないよ。
00221NGNG
Linux上で、ps,top等でプロセスが複数できているのは
プログラムの問題かな・・?って感じで書き込んだんですが・・
スレッドの定義がまだよくわかってないんですが
皆さん、回答ありがとうございました
00231NGNG
あっ!あげてしまいました・・すみません
0024名無しさん@お腹いっぱい。NGNG
SMPマシンでスレッドにstraceするとそのthreadがサスペンドして
困ってますが Kernel 2.4 でどうですか?
0025login:PenguinNGNG
> IIAptH[}XIB

ptH[}XIvA
]lBHPC WASolaris
thread タSR]B
0026login:PenguinNGNG
>>25
それマジ?
出来ればソースきぼ〜ん。
■ このスレッドは過去ログ倉庫に格納されています