- 1 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 19:26:16 ]
- マルチスレッドプログラミングについて語るスレ
■前スレ マルチスレッドプログラミング相談室 その6 ttp://pc11.2ch.net/test/read.cgi/tech/1187008532/ ■過去スレ その1 ttp://pc3.2ch.net/tech/kako/997/997345868.html その2 ttp://pc5.2ch.net/test/read.cgi/tech/1037636153/ その3 ttp://pc8.2ch.net/test/read.cgi/tech/1098268137/ その4 ttp://pc8.2ch.net/test/read.cgi/tech/1130984585/ その5 ttp://pc11.2ch.net/test/read.cgi/tech/1157814833/ OS・言語・環境は問わないが、それゆえ明記すべし。 テンプレ 【OS】 【言語】 【実行環境】 【その他突起する事項】
- 151 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 17:42:57 ]
- STM難しい
やる夫助けてくれ
- 152 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 18:05:32 ]
- >>150
第五世代コンピュータでヤフれ
- 153 名前:デフォルトの名無しさん [2008/11/09(日) 20:00:16 ]
- すみません。言語としてWinAPI(C言語)、C#、Javaを覚えたのですが(どれもGUIやファイル操作、DB接続ができる程度のレベルです。あとネットワークも少々)
スレッドプログラムを次はマスターしたいのですが、どの言語でスレッドを学ぶのが一番いいですか? ひとつ覚えたら残りの言語も覚えたいと思っていますので、とっかかりに一番いいのをおしえてください。 よろしくお願いします。
- 154 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 20:11:20 ]
- Java
- 155 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 20:29:50 ]
- >>153
どれでもいいよ。そんな取り立てて挙げるほど大層なもんじゃない。
- 156 名前:デフォルトの名無しさん [2008/11/09(日) 20:52:34 ]
- まぁJavaかC#だな。C言語でやるとLockが面倒だし
- 157 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 22:39:47 ]
- だね。
スレッドに絡む部分、概念の学習に専念できるという意味でも、 JavaかC#辺りがやりやすいと思う。
- 158 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 22:42:28 ]
- 良書が揃ってるのはJavaだからJavaにしとけばいいと思うよ
- 159 名前:153 mailto:sage [2008/11/09(日) 23:06:46 ]
- みなさんどうもありがとうございます。>>156さん、WinAPIでやるとちょっと面倒なんですね。
なるべく単純な概念だけを覚えたいので、C#かJavaにしようとおもいます。 でも、>>154サン以降全員Javaが候補に入ってるのでJavaにしようとおもいます。 いまから、本屋にいって立ち読みしてきたいとおみます。みなさん、ありがとうございました。 念願のスレッドプログラムの第一歩を踏み込めそうです。
- 160 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 11:33:47 ]
- ところでおまいらhyukiの
『Java言語で学ぶデザインパターン入門マルチスレッド編』 っておすすめでしょうか?
- 161 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 11:45:24 ]
- Java固有の話とそうでない話を見分けるつもりで読むといいよ
- 162 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 12:08:45 ]
- 並行プログラムの本がある、おすすめ。
- 163 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 17:09:52 ]
- >>160
入門書としてはベスト。それ卒業したら「Java並行処理プログラミング」
- 164 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 18:30:24 ]
- JavaってマルチCPUなりコアなりの環境でもシングルCPUしか使えない
と認識してるけどあってる?
- 165 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 18:31:56 ]
- あってる
グリーンスレッドっていう環境にやさしいスレッド方式があって、 デフォルトはそれになってる
- 166 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 18:46:24 ]
- グリーンスレッドなのはjavaの最初の版だけだったと記憶してるけど、
今でも切り替えられたっけ?
- 167 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 19:23:04 ]
- >>165
十年前から乙。 >>166 無理。グリーンスレッドとネイティブスレッドの切り替えがあるのはClassicVMで、HotspotVMはネイティブスレッドのみ。 で、ClassicVMはJava1.4あたりで切られたようだ。
- 168 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 21:01:28 ]
- 1.2 ぐらいまではずっとグリーンスレッドだった。
最初の版だけなんてことはない。
- 169 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:05:10 ]
- WroxのProfessional Multicore Programming
ってCore2とかAMDのCPUのことも書いてあるんだな
- 170 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 00:42:41 ]
- pc.watch.impress.co.jp/docs/2008/1107/winhec2_02.jpg
これをうまく制御するプログラミングが知りたい
- 171 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 00:48:22 ]
- >>170
Intelのパフォーマンスライブラリに期待しよう
- 172 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 10:48:50 ]
- >>170
すげー ビリー・ミリガンみてーだな
- 173 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 04:44:45 ]
- >>170
元気なプロセスをいっぱい動かせば良いだけのような気もする。
- 174 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 07:02:25 ]
- 同じアドレスに一斉に読み書きするとか
同じロックを一斉に取得、解放するとか そういうループをブン回して どうなるか観察したい
- 175 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 00:36:35 ]
- >>170
スレッドを192個作る。 各スレッドのaffinityを設定して、CPUに貼り付ける。 特定のスレッドのセットをビジーループにして、タスクマネージャに文字を出す。
- 176 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 00:47:04 ]
- >>175
> 特定のスレッドのセットをビジーループにして、タスクマネージャに文字を出す。 ビルのイルミネーションみたいでいいね!
- 177 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 09:57:17 ]
- winで1プロセスに64コア以上ってどうやるんだっけか
- 178 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 20:48:06 ]
- >>177
>Windows 7/Windows Server 2008 R2 では 64 論理 CPU をひとつの "グループ" と定義し, >プロセスは初期状態で "グループ" のどれかに束縛されている(どのグループに属するかはラウンドロビンで決定される). >そして,新しく定義された API で明示的に許可を与えない限り,プロセス内のスレッドは >所属 "グループ" の CPU でのみ実行される. >つまり,新しい CPU グループ制御 API を使用しない限り,ひとつのプロセスは高々 64 個の >プロセッサしか活用しない. ttp://d.hatena.ne.jp/NyaRuRu/20081107/p1
- 179 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 11:06:48 ]
- 窓7が主流になる頃には64コアCPUとか出てるって事?
凄いな
- 180 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 11:14:12 ]
- マルチCPU
- 181 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 11:30:11 ]
- 8コア*8CPUでやっと64
4CPUのマザーは見たことあるけど…
- 182 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 13:20:57 ]
- ブレードにすればよかろう。
- 183 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 22:01:52 ]
- コンシューマ向けの話じゃないのか
- 184 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 00:25:44 ]
- て言うか、ブレードってブレード毎にOSが載ると思うが。
8ブレードとかを1つのOSで制御できる奴なんてあるのか?
- 185 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 00:37:32 ]
- >>184
www.hitachi.co.jp/products/bladesymphony/product/bs1000.html インテル Itanium プロセッサー搭載サーバブレードでは、バックプレーンの 高速インターコネクトを介し最大4枚のサーバブレードをSMP接続することで、 最大8プロセッサ(16コア)のSMPサーバーとしても利用可能。 h50146.www5.hp.com/products/servers/nonstop/hardware/NB50000c/index.html 最新のデュアルコア インテル Itanium プロセッサ(9100シリーズ)を最大4,080個搭載可能
- 186 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 07:36:32 ]
- >>185
これ買おうかな やっぱ自宅警備にはこれくらいのマシンがないとな
- 187 名前:デフォルトの名無しさん [2008/11/20(木) 17:32:02 ]
- int i;
for( i=0; i<10; i++ ) { h = CreateThread ( NULL, 0, (LPTHREAD_START_ROUTINE)DoIt, NULL, 0, &id ); } void WINAPI DoIt() { // ここでいろいろ } のようにして同じ関数を複数のスレッドで行いたいのですが ここでいろいろのところに制御がいかず すぐにスレッドが終了するのですが 同じ関数をスレッドで実行することはできないのでしょうか? WindowsXP C/C++ Win32API
- 188 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 17:47:14 ]
- >>187
まず先に突っ込んでおくが、LPTHREAD_START_ROUTINEと 合わない関数をキャストで無理矢理渡すな。 DoIt()がLPTHREAD_START_ROUTINEに適合する関数なら キャストなんて必要ない。 すぐにスレッドが終了するってのは、どうやって確認した? CreateThreadを呼んだメインスレッドは、各スレッドが仕事を 終えるまで待機している? そもそもDoIt()がすぐに終了する内容じゃないの?
- 189 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 18:09:42 ]
- >>188
すいません 処理の流れがつかめてませんでした 解決しました
- 190 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 18:18:19 ]
- 便乗して質問ですが
WindowsXP Home Edition にて作成するスレッド数の上限はありますか?
- 191 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 18:26:58 ]
- msdn.microsoft.com/ja-jp/library/cc429080.aspx
> 1 つのプロセスが作成できるスレッドの数は、利用可能な仮想メモリによって制限されます。 > 既定では、各スレッドに 1MB のスタック空間が割り当てられています。 > そのため、最大 2,028 個のスレッドを作成できます。
- 192 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 19:35:05 ]
- マルチもいいけど 実行ファイルが自分で空いてるCPU選ぶようにしたい
Windows側でプロセス作成時に勝手にやってるとありがたい
- 193 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 21:55:25 ]
- 意味がわからん。
スレッドはあいているCPUでしか実行出来ないし。 ひょっとして、自分のプロセス専用にCPUが 割り振られて欲しいって話か?
- 194 名前:デフォルトの名無しさん [2008/11/21(金) 10:58:32 ]
- Sleep関数について質問ですが
MSDNによると VOID Sleep( DWORD dwMilliseconds // 中断の時間 ); とありますが マイナスの値を代入した時の挙動はどうなるのでしょうか? 実際ためしてみたのですが、永遠制御が返ってきません
- 195 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 11:34:10 ]
- DWORDは符号なしの型だからマイナス値を取れないと思うが
- 196 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 11:39:26 ]
- >>195
なるほど しかし、VC++6.0 では怒られないんですよ 2ch.homelinux.com/2d/32/src/1227235104677.jpg
- 197 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 11:41:30 ]
- VC6はゴミということで
- 198 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 11:44:17 ]
- まぁそりゃ暗黙に型変換されてるんだろう
警告なしにそういった型変換をするのはCの悪いところ というか警告レベルを上げましょう
- 199 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 12:49:10 ]
- マルチスレッド対応で60FPSを維持する方法ってどうやるんですか?
- 200 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 12:59:59 ]
- ぇ?w
垂直同期とか
- 201 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 13:57:29 ]
- >>196
49.7日待てば目覚めるはず
- 202 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 14:03:23 ]
- えいえんは、あるよ
49.7日ぐらい
- 203 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 19:43:02 ]
- >>197
Cの仕様なのに何言ってんだ。
- 204 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 19:58:03 ]
- Cはゴミということで
- 205 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 00:28:22 ]
- >196
まず警告レベルを上げろ。
- 206 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 10:52:51 ]
- >>205
警告レベル4にしたら STLのライブラリのソースでwarnningが・・・ MS君・・・
- 207 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 22:06:38 ]
- STL で warning はよくあること。
まあ気にすんな。 鬱陶しければ #pragma warning(disable: XXXX) で消して 後で #pragma warning(default: XXXX) で復活させれば良い。
- 208 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 03:09:31 ]
- CreateThreadでクラスのメンバ関数って渡せますか?
- 209 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 03:21:05 ]
- なんとなく自己解決しました
- 210 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 16:46:25 ]
- test
- 211 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 19:47:00 ]
- >>201
INFINITE = 0xFFFFFFFF = (DWORD)-1
- 212 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 21:46:58 ]
- >>211
あーそうなんだー
- 213 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 00:26:53 ]
- P2Pや分散メモリに適した高速
ロックってどんなのがあるのですか?
- 214 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 00:43:43 ]
- とりあえず知ってる言葉を並べてみました。
- 215 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 07:57:29 ]
- >>213
高速なパッセージならやっぱ3大ギタリスト、とくにベックじゃね? ルカサーも捨てがたいが 若いのは知らん
- 216 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 11:30:25 ]
- やっぱりクリティカルなセクションをアトミックに相互排他する場合
レスポンスタイムが長いメモリをダイレクトにアクセスするのは非効率だから トランザクショナルメモリみたいな遅延する仕組みがマストニードじゃないですかね
- 217 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 13:11:00 ]
- 日本語でおk
- 218 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 13:27:51 ]
- やっぱり際どい領域を原子的に相互排他する場合
反応時間が長い記憶装置を直接読み書きするのは非効率だから トランザクショナルメモリみたいな遅延する仕組みがどうしても必要じゃないですかね トランザクショナルメモリだけはどうにもならんかった。
- 219 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 13:37:44 ]
- 「処理単位記憶装置」かな?
- 220 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 14:44:45 ]
- 都覧公国量産型六番書鳴記憶
- 221 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 20:55:12 ]
- ザクメモリってどうやってつくるの?
アルゴリズム全然解らん
- 222 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 21:45:47 ]
- 弱そうなメモリだな
- 223 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 21:51:07 ]
- トラングフショナルメモリ
- 224 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 21:51:07 ]
- トランザクショナルメモリって
どんなアルゴリズムなのですかね? 何処探してもみつからない
- 225 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 22:02:31 ]
- ロックフリーあたりで調べればいいと思う
でもコストが大きい気がするのでリードライトロック程度で十分かと
- 226 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 22:14:10 ]
- リードライトロックの中にもフェアかフェアじゃないかで変わるけどね。
オブジェクト指向はハードウェアの都合までは吸収してくれんよなぁ。 マルチスレッドのデザパタ見ててそう思う。
- 227 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 22:44:09 ]
- 排他制御書き込みって
pthread_rwlockで実現できますか?
- 228 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 00:04:59 ]
- 素直にmutexつかっとけ
読み書き両方な
- 229 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 00:17:05 ]
- >228
排他制御書き込み実現しようとすると pthread_mutexでは、try_lockを全mutex分 毎回ぶん回すってことでおkなのかな? この辺の定石ってよくわからん
- 230 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 03:01:55 ]
- mutexが複数あるの?
どういう排他制御をしたいのかわからん
- 231 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 15:29:07 ]
- スレッド2000個作って
画像データダウンロードするやつ作ったんだけど スレッドが全部同時に動作しないんだ どこがいけないんだ?
- 232 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 15:42:50 ]
- 当てずっぽうだけどサーバが2000接続も同時に処理できないんじゃね
1個ずつ順番に処理して残りは待たされてるとか
- 233 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 15:53:38 ]
- そもそも2000スレッドが同時に動くはずがない。
- 234 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 15:58:58 ]
- 1000コア*2(HT)ですね
もしそんなのがあったとしても現状Linuxしか動かせない
- 235 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 16:25:36 ]
- 「全部同時に」ってのがどの程度の同時性を指してるんでしょうね
- 236 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 18:00:38 ]
- Sunのやつなら動くと思うよ
- 237 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 19:34:10 ]
- どの程度とかの精度の問題ではないんですよ
動けばいいだけのレベルなんですけど for ループ内で約2000 個のスレッド作るんで、 タイミング的にはほぼ同時な気がしますが OSにもよるかもしれませんが、 そうそう10秒以上も差が出るとは思えないんで 精度は10秒以内くらいの超おおざっぱでいいですけど 動かないんですよ ちなみにCUI コマンドプロンプトで多数のスレッドから printf されるとやはり多重に出力され hogehogehogehoge が hohohogegegehoge になったりするんでしょうか?
- 238 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 19:34:15 ]
- 環境は?
win32じゃなさそうだが
- 239 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 19:45:36 ]
- Erlangなら60000スレッドぐらい起せるよ
- 240 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 19:54:33 ]
- >>237
標準出力はバッファリングされるので、混ざる場合はバッファサイズずつ混ざる。 >237のように1バイトずつ混ざることはない。
- 241 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 22:34:02 ]
- >>237
動かないってどう動かないんだよ。
- 242 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 22:45:56 ]
- >>238
機密事項なので書けません><
- 243 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 23:39:13 ]
- おれも1万個ぐらい動かしてるけど別に問題ないな。
機密事項だから環境は書けないが。
- 244 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 23:53:58 ]
- >スレッド2000個作って画像データダウンロードする
あほのすることだな
- 245 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 05:05:46 ]
- >>244
ネットワークモニタの使用率が25%超えたことないんで 限界までいどみたかったとです
- 246 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 05:36:11 ]
- >>245
自分で対向サーバを用意すれば簡単だよ。
- 247 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 06:44:22 ]
- スレッドって関係あるん?
- 248 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 07:44:39 ]
- >>247
deteike
- 249 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 10:16:03 ]
- 2000個もスレッド作ってりゃオーバーヘッド大きすぎてそりゃ限界までいかんわな。
っていうかそもそもネットワークモニタって実効速度の%出してくれるんだっけ??
- 250 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 11:04:38 ]
- >>249
タスクマネージャにあるよ OSの限界ギリギリまで性能を出そうとしたのに なんてOSだ・・・
- 251 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 11:48:23 ]
- 馬鹿は巣にお帰りください。
|

|