1 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 17:19:27 ] マルチスレッドプログラミングについて語るスレ ■前スレ マルチスレッドプログラミング相談室 その7 pc12.2ch.net/test/read.cgi/tech/1215253576/ ■過去スレ その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/ その6 ttp://pc11.2ch.net/test/read.cgi/tech/1187008532/ OS・言語・環境は問わないが、それゆえ明記すべし。 テンプレ 【OS】 【言語】 【実行環境】 【その他特記する事項】
543 名前:540 mailto:sage [2010/12/24(金) 15:52:35 ] そうだった、最近のデータはでかいんだな。 組み込み系のスレ見た後だったから頭がアセンブラレベルになってた。 失礼。 俺はどっちにしてもミューテックスかクリティカルセクションで排他しておくけど。
544 名前:デフォルトの名無しさん mailto:sage [2010/12/24(金) 17:17:54 ] 同時アクセス時の挙動なんてCPUの仕様次第だろ 同時読込なら安全なんて確証は無い
545 名前:デフォルトの名無しさん [2010/12/24(金) 17:20:04 ] データが小さければ読み書きのキャッシュ問題とか無視できるが、 今はふつうに扱う標準データが大きいからなあ。プログラミングも大変だ。
546 名前:デフォルトの名無しさん mailto:sage [2010/12/24(金) 17:20:27 ] アホ発見
547 名前:デフォルトの名無しさん mailto:sage [2010/12/24(金) 17:30:42 ] 同時読込なら安全なんて確証は無い・・・ ということは同じ関数を同時に実行するとまずい場合があるってことか 同じ関数を同時に実行すると同じ命令列を同時に読込むことになるもんな
548 名前:デフォルトの名無しさん mailto:sage [2010/12/25(土) 20:23:56 ] 言語仕様じゃなくハードウェア仕様だと理解してればいい 大丈夫かどうかを言語仕様で調べても守備範囲外のことで規定されてないから無駄
549 名前:デフォルトの名無しさん mailto:sage [2010/12/25(土) 20:28:39 ] いや失礼、言語仕様で規定されてる物もあるか
550 名前:デフォルトの名無しさん [2010/12/26(日) 16:17:56 ] printfがスレッドセーフじゃないのはわかるけど どうしてsprintfがスレッドセーフではないのはなぜ?
551 名前:デフォルトの名無しさん mailto:sage [2010/12/26(日) 16:24:32 ] >>550 内部にスタテックバッファーを持ってるかも。
552 名前:デフォルトの名無しさん mailto:sage [2010/12/26(日) 16:54:42 ] >>551 まじか・・・だらしのないやつだなsprintfも・・・
553 名前:デフォルトの名無しさん mailto:sage [2010/12/26(日) 17:45:40 ] おまえが使ってるライブラリを実装したところに聞けよ
554 名前:デフォルトの名無しさん mailto:sage [2010/12/26(日) 18:09:36 ] sprintfがスレッドアンセーフってのはどこ情報?
555 名前:デフォルトの名無しさん mailto:sage [2010/12/26(日) 19:50:50 ] あとだしで申し訳ないがライブラリはglibcです >>554 ttp://slashcolon.com/wordpress/2007/12/25/ ttp://www.kmonos.net/alang/d/2.0/ctod.html#printf Dでスレッドセーフにしました=Cだとスレッドセーフちがう と解釈しました ていうか、そもそもprintfがスレッドセーフだという情報がない。 不明なうちはアンセーフ扱いするのが俺のジャスティス
556 名前:デフォルトの名無しさん mailto:sage [2010/12/26(日) 20:00:44 ] なるほど 確かに
557 名前:デフォルトの名無しさん mailto:sage [2010/12/26(日) 20:13:26 ] それ英語版見たらスレッドセーフなんてどこにも書いてないぞ・・・ > writefln() improves on printf() by being type-aware and type-safe: 誤訳じゃないのか
558 名前:デフォルトの名無しさん mailto:sage [2010/12/26(日) 20:16:54 ] ttp://stackoverflow.com/questions/467938/stdout-thread-safe-in-c-on-linux 適当にぐぐったけどglibcはスレッドセーフとか書いてるような感じ
559 名前:デフォルトの名無しさん [2010/12/27(月) 11:09:50 ] へえ
560 名前:デフォルトの名無しさん mailto:sage [2010/12/27(月) 14:34:33 ] 探しても「セーフだろう」「たぶんセーフ」ばっかりしか出てこない むずむずするなぁ
561 名前:デフォルトの名無しさん mailto:sage [2010/12/27(月) 15:03:50 ] IEEE Std 1003.1-2001の定義では、例外的にアンセーフで良いとされているもの以外は スレッドセーフ。 pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_09.html
562 名前:デフォルトの名無しさん mailto:sage [2010/12/28(火) 19:19:26 ] 過去スレ全部はみれなかったんだけど、マルチスレッド関連の良書をまとめてみる。 この他にこれがいいとかあったり、これ駄目とかあったら教えて。 [一般] 並行コンピューティング技法 ―実践マルチコア/マルチスレッドプログラミング The Art of Multiprocessor Programming 並行プログラミングの原理から実践まで 増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編 [java] Javaスレッドプログラミング―並列オブジェクト指向プログラミングの設計原理 (OO SELECTION) Concurrency: State Models and Java Programs 2edition Java並行処理プログラミング ―その「基盤」と「最新API」を究める [windows] Win32 マルチスレッド プログラミング Advanced Windows 第5版 上 Advanced Windows 第5版 下 [Unix] POSIXスレッドプログラミング
563 名前:デフォルトの名無しさん mailto:sage [2010/12/31(金) 19:52:51 ] [C++] インテルスレッディング・ビルディング・ブロック 主にこのライブラリの使い方だが、 他にもスレッド管理の考え方が載ってる。まぁオープンソースなので見れるのだけど
564 名前:デフォルトの名無しさん mailto:sage [2011/01/03(月) 21:56:27 ] ありがとうございます。C++の良書をあまり知らないので助かります。
565 名前:デフォルトの名無しさん mailto:sage [2011/01/15(土) 09:14:58 ] concurrent hashmapのC++実装って なんでないの?
566 名前:デフォルトの名無しさん mailto:sage [2011/01/15(土) 09:49:16 ] >>565 キミのためにお取り置きしてある。
567 名前:デフォルトの名無しさん mailto:sage [2011/01/15(土) 10:31:02 ] >>566 並列mapでいいから実装ないの? C++って並列コンテナないから何もできないよね
568 名前:デフォルトの名無しさん mailto:sage [2011/01/15(土) 18:21:33 ] >>567 キミが作るだろうと思って残しておいた。
569 名前:デフォルトの名無しさん mailto:sage [2011/01/16(日) 11:14:37 ] >>567 俺のところにはある。
570 名前:デフォルトの名無しさん mailto:sage [2011/01/16(日) 11:28:44 ] C/C++はアセンブラと高級言語の間みたいな位置だからな 言語そのものを作るとか、OSを作るとか、リソースの厳しい組み込み系で作るとか、 そういう用途じゃないなら別に強力な言語ではない ネイティブのCPUの挙動を理解しないとC/C++の有用性は半減すると思われ
571 名前:デフォルトの名無しさん mailto:sage [2011/01/25(火) 23:02:03 ] すみません、spin-lockをしている間にCPUの使用率を下げる方法を知っている方はいますか? 調べてみると、rep;nop命令やSSEのpause命令をがそれに該当するように思えるのですが、 使ってみても何ら変わりませんでした。 スピンロックつかっわないとは思うんだけど。 自作のスレッドバリア関数(自作のspin_lock)を作って、 たとえば、 if(threadnum=5) sleep(10); my_barirrer(); とするとスレッド5を待っている間は5以外のCPU使用率が100%近くなってしまいます。 それに対してOpenMP使った場合では、 if(threadnum=5) sleep(10); #paragma omp barirrer だと待っている間はCPU使用率は殆ど変わりません。 ちなみに自作のspinlockは下記のような感じです。 if(thread_num == 0) { asm volatile( "Loop1:\n\t\t" "movl (%0), %%eax\n\t\t" "movl (%1), %%ebx\n\t\t" "lfence\n\t\t" "cmpl %%ebx, %%eax\n\t\t" "rep;nop\n\t\t" "jne Loop1\n\t\t" : :"r"(&lock->sync), "r"(&lock->maxthreads) :"memory","%eax","%ebx" ); というか、これって間抜けですかね?
572 名前:デフォルトの名無しさん mailto:sage [2011/01/25(火) 23:10:46 ] 自前でタスク切換えみたいなことするしか
573 名前:デフォルトの名無しさん mailto:sage [2011/01/25(火) 23:15:42 ] >>571 >>369
574 名前:デフォルトの名無しさん mailto:sage [2011/01/25(火) 23:24:51 ] >>573 お前友達いないだろ
575 名前:デフォルトの名無しさん mailto:sage [2011/01/25(火) 23:34:47 ] >>571 Sleepさせりゃいいんじゃね。
576 名前:デフォルトの名無しさん mailto:sage [2011/01/25(火) 23:44:45 ] 割り込みでしか切り替わらないコードで使用率下げたいというのが
577 名前:デフォルトの名無しさん mailto:sage [2011/01/28(金) 22:22:30 ] さむいな(´・ω・`)
578 名前:デフォルトの名無しさん mailto:sage [2011/01/28(金) 22:43:23 ] 寒稲
579 名前:デフォルトの名無しさん mailto:sage [2011/01/31(月) 22:10:29 ] >>571 CPU使用率が100%じゃないロックなんて、スピンロックとは認めない。
580 名前:デフォルトの名無しさん mailto:sage [2011/02/01(火) 00:53:40 ] そもそも100%じゃないってことはコンテキストスイッチしてるってことになるでしょ? 何のためのスピンロックなのよあり得ない。
581 名前:デフォルトの名無しさん mailto:sage [2011/02/01(火) 10:50:42 ] スリープロックのループもスピン扱いすることもあるから何とも
582 名前:デフォルトの名無しさん mailto:sage [2011/04/04(月) 19:37:25.20 ] ちょっと聞いていい? 以下のコードでnotifyAllされたらどうなるのって質問 void A() synchronized(Lock){ if(List.size() == 0){ try{ Lock.wait(); }(Exception e){} } //以下処理続く } } このコードで複数のスレッドが待ち状態だったらnotifyAllとき再度Lockを取りに行ってくれるの? もし、そうだったとしたら。 結局はnotifyで1つのスレッドのみ動かすってのと同じことになるの? それとも再起処理的に以下のようにしなきゃだめ? void A() synchronized(Lock){ if(List.size() == 0){ try{ Lock.wait(); }(Exception e){} A(); ←ここでさらに再帰的に同じメソッドを呼び出す } //以下処理続く } } おしえてエロイひと。。。
583 名前:デフォルトの名無しさん mailto:sage [2011/04/04(月) 19:47:38.94 ] >>582 notifyAll を呼ぶと、wait してたスレッドはすべて起きて、 Lock を取りに行く どうせみんなすぐには取れないから Lock 待ち状態になるが、すでに wait からは外れてるので、 Lock を取れた順にすべてのスレッドが動き出す notify の場合は、wait してたスレッドのうちひとつだけが起きて Lock を取りに行く 他のスレッドは、その後 Lock が空いても、眠ったまま起きない wait はふつう再帰じゃなくて while にする synchronized (Lock) { while (List.size() == 0) { Lock.wait(); } } waitは、notifyされてなくても間違って起きることがあるらしいので、このように書くべきこととされている
584 名前:デフォルトの名無しさん mailto:sage [2011/04/04(月) 20:17:38.60 ] >notifyAll を呼ぶと、wait してたスレッドはすべて起きて、 Lock を取りに行く ということはnotifyAllでそのまま下に処理が流れていくんじゃなくて 再度 synchronized(Lock){ ←この部分に処理が戻ってくるイメージなんですかね? 別のメソッド内の以下のようなコードでnotifyAllをかけようと思ってたんだけど、 ちゃんとnumの個数分以上のスレッドは再度、wait状態に入ってくれるのか心配でした for(int i = 0 ; i < num ; i++){ List.add(object); } Lock.notifyAll(); それと。 while (List.size() == 0) { Lock.wait(); } これしなきゃいけないんですね。Javadoc見てきました。 >>583 ありがとー。
585 名前:デフォルトの名無しさん mailto:sage [2011/04/04(月) 21:55:04.24 ] >>584 synchronized のところまで戻るわけじゃなく、synchronized の中にいるまま、 wait のところで、 Lock をいったん解放、おやすみなサイして、起きたら元通りに取りにいく wait は synchronized の中でありながら Lock を手放している特殊な場所 notifyAll を呼んだ側のスレッドは、notifyAll を呼んだあとそのまま下に流れていく というのも、notifyAll を呼んだ時点では Lock は notifyAll 側のスレッドが握ってるので (synchronized 中のはず)、 wait 側のスレッドは起きるけれども、Lock を取れない notifyAll 側が synchronized から抜けるなりして Lock を解放すると、wait 側が Lock を取って動き出せるようになる
586 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 01:36:55.92 ] 質問です CreateThreadで複数のスレッドを作ったときに渡したパラメータは スレッドごとに別々のものを渡してもいずれ同じものに書き換えられてしまうと思うんですけど これをスレッドごとに別々のままにしてやるにはどうしたらいいのでしょうか VCなら__declspec(thread)をつけるとTLSが使えると読んだのですが これをCreateThreadに渡すThreadProcのどこで使えばいいのかわかりません
587 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 03:14:14.44 ] >いずれ同じものに書き換えられてしまう そういうことをやってるだけでしょ
588 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 08:33:13.11 ] >>586 お前がやってんのは int a; int* b = &a; int* c = &a; int* d = &a; のb,c,dが別々のものと言ってるのと同じだろ
589 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 08:38:22.51 ] あーなるほど、同じ場所(=ポイント先)を渡して「別々のもの」と言い張っているのか。
590 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 11:41:30.98 ] forkってスレッドセーフ?
591 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 11:56:15.17 ] >>590 関数だけ見ればMT-safe pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_09.html でも d.hatena.ne.jp/yupo5656/20040715
592 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 21:24:18.36 ] 別のポインタ渡したつもりで同じものを渡していたことに気づいて悲しくなりました お手数おかけしました
593 名前:デフォルトの名無しさん [2011/06/23(木) 08:39:51.24 ] スレッドって、毎秒ごとに数百回の開始と終了を繰り返すような使い方は正しいの? それとも、必要な時だけスレを立てる使い方じゃなくて、 スレは基本的に立てっぱにしといて、用がある時にメッセージ等を送るという使い方をすべき?
594 名前:デフォルトの名無しさん mailto:sage [2011/06/23(木) 08:45:48.47 ] スレッドの開始はそれなりにコストの大きい処理だから スレッドプールにするのが正解
595 名前:デフォルトの名無しさん mailto:sage [2011/06/23(木) 08:49:17.54 ] なるほど。直観的じゃないのな。
596 名前:デフォルトの名無しさん mailto:sage [2011/06/23(木) 09:10:49.87 ] 用途によるよ。一度スレッドを起動したら数十秒は戻ってこないならプールしなくても大差ない。
597 名前:デフォルトの名無しさん mailto:sage [2011/06/23(木) 09:47:04.06 ] 593の前提と変わってるじゃんか
598 名前:デフォルトの名無しさん mailto:sage [2011/06/23(木) 22:41:08.11 ] >>593 同時に起動できるスレッドの数ってそんなに多くないしな。 32bit、Windowsだと2000個くらい(スタックサイズ標準の場合)
599 名前:デフォルトの名無しさん mailto:sage [2011/06/24(金) 00:22:34.83 ] スレッドの生成は5ミリ秒くらいのオーバーヘッドあるだろ。 数百回やるなんて頭おかしい >>598 今時32ビット縛りなんて考える必要なくね?
600 名前:デフォルトの名無しさん mailto:sage [2011/06/24(金) 05:23:53.79 ] 5msec!
601 名前:デフォルトの名無しさん mailto:sage [2011/06/24(金) 10:49:09.11 ] なにそのみずほ銀行
602 名前:デフォルトの名無しさん mailto:sage [2011/06/24(金) 10:53:32.07 ] ミリ秒はつらいな・・・ と思ったけど16ビット機なら仕方ないか。
603 名前: ◆0uxK91AxII mailto:sage [2011/06/24(金) 17:27:33.68 ] 手元の環境だと、threadの生成と実行開始のどちらも0.1[ms]すら掛からないね:)
604 名前:デフォルトの名無しさん mailto:sage [2011/06/25(土) 01:58:06.76 ] XPからスレッド生成が凄く速くなった記憶がある
605 名前:デフォルトの名無しさん mailto:sage [2011/06/25(土) 17:22:00.98 ] じゃあ0.1msでスレッド生成するコード晒してみろよ
606 名前: ◆0uxK91AxII mailto:sage [2011/06/25(土) 18:39:30.70 ] Win32のCRTにある_beginthread。 生成は0.1[ms]未満、実行開始はコンパイラかライブラリに依存で0.1[ms]台からに訂正。 #include <Windows.h> #include <stdio.h> #include <process.h> struct perf {LARGE_INTEGER freq;LARGE_INTEGER t0;};void __cdecl thread(void * pArg){perf *pperf;LARGE_INTEGER t1, d;QueryPerformanceCounter(&t1);pperf = (perf *)pArg;printf("thread: %I64d\n",t1.QuadPart-pperf->t0.QuadPart);}int main(){ LARGE_INTEGER f={0}, t0, t1, d;perf perf;QueryPerformanceFrequency(&f);printf( "freq: %I64d\n", f.QuadPart);perf.freq = f;QueryPerformanceCounter(&t0);perf.t0 = t0;_beginthread(thread, 0, &perf);QueryPerformanceCounter(&t1);printf( "main: %I64d\n", t1.QuadPart-t0.QuadPart);Sleep(1000);return 0;}
607 名前:デフォルトの名無しさん mailto:sage [2011/06/25(土) 22:55:22.93 ] >>606 5764ticks/272758=2.1ms。 一桁違ってないか?どんだけ速いマシン使ってんの
608 名前:607 mailto:sage [2011/06/25(土) 23:17:06.14 ] 訂正。 誤:5764ticks/272758=2.1ms 正:5764ticks/2727568=2.1ms 処理のスループットが問題なんだからJOINの時間も入れよーぜ。 あと、>>606 はmainが先に終わると不正メモリアクセスになる糞コード
609 名前:デフォルトの名無しさん mailto:sage [2011/06/26(日) 01:54:34.21 ] C#だけど2マイクロ秒くらいだよ。 var sw = new System.Diagnostics.Stopwatch(); sw.Start(); for (var i = 0; i < 1000; i++) {new Thread(F);} decimal time = (decimal)sw.ElapsedTicks / System.Diagnostics.Stopwatch.Frequency; Console.WriteLine("{0} [ms]", time / 1000 * 1000);
610 名前:デフォルトの名無しさん mailto:sage [2011/06/26(日) 02:04:01.25 ] ∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ こいつ最高にアホ 彡、 |∪| / / __ ヽノ / (___) /
611 名前: ◆0uxK91AxII mailto:sage [2011/06/26(日) 10:35:46.17 ] >>607 >>608 Core i7 2600K 3.4[GHz] HTT無効, Windows 7 X64 SP1, Visual C++ 2010 Express >mainが先に終わると不正メモリアクセスになる糞コード 大丈夫だ、問題ない。 >>609 thread poolだから略。
612 名前:デフォルトの名無しさん mailto:sage [2011/06/26(日) 15:21:14.56 ] >mainが先に終わると不正メモリアクセスになる糞コード こういうことを平気で書いちゃう人もいるんだな。笑える。
613 名前:デフォルトの名無しさん mailto:sage [2011/06/26(日) 15:23:47.45 ] 具体的に反論できない奴のテンプレート的反応で笑える。
614 名前:デフォルトの名無しさん mailto:sage [2011/06/26(日) 20:09:29.64 ] >>611 Xeon E5506 2.13GHzだが0.46msだった。0.1msには及ばない。 >thread poolだから略。 Threadはスレッドプーリングされない。単にStartし忘れているだけ
615 名前:デフォルトの名無しさん mailto:sage [2011/06/26(日) 22:10:05.48 ] node.jsの説明見ているとシングルスレッドなので万歳!みたいな記事が多く混乱してみる
616 名前:デフォルトの名無しさん mailto:sage [2011/06/26(日) 23:27:19.63 ] あれは 『マルチスレッドやマルチプロセスではC10Kに対応できなくね? 俺良い事思い付いた。シングルスレッドでイベントドリブンにしたら良いんじゃね。』 という発想だから、 『あー、でもマルチコアマシンではシングルスレッドだと性能出なくね? 結局ロードバランサとか必須だわな。』 みたいな話をすると、そもそも何でマルチスレッドを否定していたのかという 自己矛盾に陥るので、わざとスルーしているのかもね。ちょっと分かり辛いよね。
617 名前:デフォルトの名無しさん mailto:sage [2011/06/26(日) 23:49:28.20 ] C10Kが騒がれてたのはもう10年くらい前の話で、 その頃は1CPUでシングルコアのマシンが殆どだったしね
618 名前: 58-3-155-112.ppp.bbiq.jp mailto:sage [2011/06/27(月) 07:39:41.06 ] リクエスト来る事にスレッド作成してた今までが異常すぎ C10K問題で破綻するのは今でも一緒ですわい
619 名前: ◆0uxK91AxII mailto:sage [2011/06/27(月) 09:16:36.96 ] >>614 >Threadはスレッドプーリングされない。単にStartし忘れているだけ ouch C#、試してみたら遅すぎた。 Cの4~20倍くらい掛かっている。
620 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 19:42:02.22 ] >遅すぎた 0.1msの20倍は2msだろ。 50スレッド生成しても0.1秒、全く問題ないような
621 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 20:02:07.59 ] Unix屋なんでWindowsは全く詳しくないけど スレッド数をむやみやたらを増やしてもオーバーヘッドが多くなるだけでいいことなんてないのでは? それよりスレッドプールを使った方が管理も簡単だと思うんだけど、Winの開発環境にはもしかしたら スレッドプールライブラリーみたいなのがなくて自分で仕組みを作らなきゃ駄目なのかい
622 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 20:04:40.67 ] スレッドは設計?をよう考えないとハマるだろうに
623 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 21:44:24.18 ] >>621 UNIXでよく使われるものはWindowsにもある と考えてまず間違いない
624 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 23:29:57.24 ] スレッドのメリットはスループット性能だけではないのだが。
625 名前:デフォルトの名無しさん mailto:sage [2011/06/28(火) 10:33:59.70 ] メモリ空間が共通なのはデメリットだよね?
626 名前:デフォルトの名無しさん mailto:sage [2011/06/28(火) 11:04:08.15 ] 共通じゃないのが欲しければfork→execでいいんじゃね。
627 名前:デフォルトの名無しさん mailto:sage [2011/06/28(火) 20:31:14.09 ] メモリ空間共通のデメリットって、Cでメモリ破壊の危険性を排除できない ぐらいしか思いつかないんだが。
628 名前:デフォルトの名無しさん mailto:sage [2011/06/28(火) 20:40:04.57 ] ・メモリ共有だと、プロセスが落ちたら皆落ちる ・NUMAではメモリ上のデータは分散していた方が良いよね? ・別プロセスなら別ノードにも移せるので自由度が高い ・セキュリティ(他の実行単位からデータが見えない) 等々
629 名前:デフォルトの名無しさん mailto:sage [2011/06/28(火) 20:43:17.24 ] 仕事で4Gの空間じゃ足りないってことがあった 64bitならしらねw
630 名前:デフォルトの名無しさん mailto:sage [2011/06/28(火) 20:55:56.81 ] NUMAは違うだろ どこから割り当てるかは別にプロセス分けなくてもできる
631 名前:デフォルトの名無しさん mailto:sage [2011/06/28(火) 21:36:49.16 ] メモリ空間が共通なのはメリットだろう常考
632 名前:デフォルトの名無しさん mailto:sage [2011/06/29(水) 10:48:43.16 ] プログラムは常に死ぬ可能性がある という前提に立つと、 メモリ空間の共有はデメリットだよな
633 名前:デフォルトの名無しさん mailto:sage [2011/06/29(水) 11:36:26.30 ] メリットもデメリットもある
634 名前:デフォルトの名無しさん mailto:sage [2011/06/29(水) 11:51:59.86 ] >>632 >プログラムは常に死ぬ可能性がある という前提に立つと、 なんという時代遅れのやつ
635 名前:デフォルトの名無しさん mailto:sage [2011/06/29(水) 12:05:00.86 ] スレッド蹴るかプロセス上げるかは、利用場面での損得勘定で決まることだから、 状況想定もなしにメリットデメリットを語ってもナンセンスすぎてなあ…
636 名前:デフォルトの名無しさん mailto:sage [2011/06/29(水) 12:54:18.84 ] >>635 マルチスレッドで得られるメリットは基本的にパフォーマンスのみ。 マルチプロセスで得られるメリットはマルチスレッドで実現不能なことがほとんど。
637 名前:デフォルトの名無しさん mailto:sage [2011/06/29(水) 16:52:22.47 ] ある特徴が長所なのか短所なのかは目的次第(この話に限らない一般論) パフォーマンスいらないならマルチスレッドなんてしないだろ
638 名前:デフォルトの名無しさん mailto:sage [2011/07/23(土) 20:17:54.60 ] 処理中にUIが固まらないようにするためのマルチスレッドは よく使用されるが、それをパフォーマンス目的とは言わないだろう
639 名前:デフォルトの名無しさん mailto:sage [2011/08/02(火) 16:21:14.65 ] パフォーマンスだけがメリットだとしても、パフォーマンスのメリットは計り知れない からな クラしか見てない奴はパフォーマンス需要は頭打ちと思ってるかもしれんが、鯖は逆に クラウド化でクラの負担も全部引き受ける路線だから、パフォーマンスが非常に厳しく 求められるようになってる訳だし、鯖向けソフトウェアはパフォーマンス一つでシェア が取れる例も全く珍しくないしな
640 名前:デフォルトの名無しさん mailto:sage [2011/08/02(火) 16:23:33.58 ] ×クラウド化で ○クラウド化とか含めて
641 名前:デフォルトの名無しさん mailto:sage [2011/08/14(日) 09:56:51.34 ] >>638 例が適切ではアリマセンネー UIを固めない = 操作者を待たせない = 操作者も含めたシステム全体のパフォーマンス向上、 という図式が成立するとも言う パフォーマンス向上以外のマルチスレッド利用としては、 非同期事象を取りこぼさずに受けるため、というのが挙げられると思うが、 それとて取りこぼさずに済むためのハードウェアの速度要件もしくはCPU時間消費の低減につながるため 結果的にパフォーマンス向上と言えなくもないという、
642 名前:デフォルトの名無しさん mailto:sage [2011/08/14(日) 12:36:09.51 ] msdn.microsoft.com/library/cc464185.aspx これでおk
643 名前:デフォルトの名無しさん mailto:sage [2011/08/14(日) 13:42:20.18 ] >>641 副次的な効果を目的に持ってこないほうがいい。 UIを固めないと中断が実現できたり、操作者のわかりやすさに繋がるんだよ。 それはパフォーマンス向上ではなく、別のことが目的だろう。