[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 05/09 09:53 / Filesize : 193 KB / Number-of Response : 799
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

マルチスレッドプログラミング相談室 その6



1 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 21:35:32 ]
マルチスレッドプログラミングについて語るスレ。

その1 pc3.2ch.net/tech/kako/997/997345868.html
その2 pc5.2ch.net/test/read.cgi/tech/1037636153/
その3 pc8.2ch.net/test/read.cgi/tech/1098268137/
その4 pc8.2ch.net/test/read.cgi/tech/1130984585/
その5 pc11.2ch.net/test/read.cgi/tech/1157814833/

OS・言語・環境は問わないが、それゆえ明記すべし。
テンプレ

【OS】

【言語】

【実行環境】

【その他突起する事項】

560 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 20:03:24 ]
スレッドでいくつかの処理を行いたいのですが、
その処理の内容が
1、実はまったくスレッドが必要にならない場合がある
2、処理の行われる間隔が長いので、
  続く処理が無いようならとりあえずスレッドを終了させたい
というもので、ある処理のリクエストが入ったとき、

*スレッドが稼動していればそのままリクエストを追加
*稼動していなければ新たにスレッドを起動して処理を開始
*終了要求が入ったらすべてのリクエストを破棄&スレッドを終了

ということがしたいのです。

561 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 20:13:33 ]
スレッドを終了する要因がメイン側からの要求だけなら、
スレッドが生きてるかどうかはメイン側が完全に把握してるはずなので、
子スレッド側から「すでに終了してるぞ」フラグを操作する必要はないはず

562 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 20:23:14 ]
>>561
スレッドを終了させる要因には、メイン側からの通知もそうですが、
子スレッド内での例外や、自殺も含まれます。
結局、これはフラグで操作するしかないのでしょうか?
というのも、「スレッドをフラグで操るなんて危なすぎ」みたいな話を聞いたことがあるので・・・
それにconditionとか、なんとなくかっちょいい機能を使いたいような気もします

563 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 20:30:57 ]
>>561
すいません。分かりにくかったですね。これも追加してください
*リクエストが無ければ、とりあえずスレッドを終了(再びリクエストが来たら再度起動)

564 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 20:55:19 ]
例外で死ぬなら、残ったリクエストを誰かが引き継がなきゃいけないような・・・
キャッチできるなら再開して残りのリクエストを処理する方がいいんじゃないかな
リクエストキューとスレッド生存フラグは単一のロックで操作しないとまずいことになると思う
終了要求フラグは別のロックでも構わないけど、一緒にしとくのが無難かと

親側
lock {
リクエスト投入
if (スレッド生存==false) { 子スレッド起動; スレッド生存=true }
}
子側
loop {
lock {
if (終了要求) { スレッド生存=false; return }
リクエスト取り出し
if (もうリクエストないよ) { スレッド生存=false; return }
}
try { リクエスト処理 } catch { エラーメッセージを吐くとか }
}
たぶんこんな感じ?

565 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 20:57:14 ]
終了してるかどうかはそのためのもの(WinならWaitForSingleObjectとか)で調べるでしょう。

566 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 21:08:10 ]
>>565
スレッドが例外とかで突然死した場合はメイン側でWaitFor〜なりで捕まえて再起動するしかないけど、
リクエスト投入時の新スレッド起動判断をそれでやると、
その直前にリクエストがキューにないと判断したため自発的に終了しつつあるスレッドと入れ違いになる可能性が・・

567 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 21:25:45 ]
>>564
おお、なるほど。そういう風にやればいいんですね。
>>557だと、「いろいろな処理」中にisActiveがfalse、
かつリクエスト追加でフラグがtrueになるとスレッド二つになりますし、
タイミング的にスレッド消える危険もありますね。
それをテンプレにしていろいろ試してみたいと思います。
ありがとうございました。

568 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:14:25 ]
俺ならこんな構造にする。
・リクエストを出すスレッドはイベントループを持つ。
・作業スレッドはリクエストキューと終了要求フラグを見ながら愚直に仕事をする。
・作業スレッドが処理を1つ済ませたり終了したりしたら、
1回だけ呼ばれるコールバックを要求元スレッドのイベントループに登録する。
・コールバックは要求元スレッドで走り、処理結果やエラーを通知する。
問題は、イベント待ちで寝ているときに目を覚まさせる方法が
既成のイベントループに必ずしも用意されていないこと。



569 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 09:40:13 ]
毒を投げればいいだろ

570 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 09:48:43 ]
基本的にスレッドはブロッキング操作があるようなものを非同期で行わせるために俺は使ってるから,
イベントループとか使えないんだよね

571 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 12:56:56 ]
一方、漏れは匙を投げた。

572 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 19:03:51 ]
double pi=3.14159265358979823846;
if((fp=fopen("PI.bin","wb"))==NULL)
printf("\aファイルをオープンできません。\n");
else{
fwrite(&pi,sizeof(double),1,fp);
fclose(fp);
}

C言語で↑のようにpiをバイナリファイルに書き込んで、
BZというバイナリエディタで開いたのですが”$-DT・ @”(文字部)と表示されました。
その後にfread関数でPI.binの内容をプログラム上で出力すると3.1415926……とさきほどの数字に限りなく近い数字できちんと表示されたのですが
バイナリエディタで見ると変な文字に変わってしまうのは、何が原因なのでしょうか?これをバイナリファイルとして正しく見れる方法はあるのでしょうか。

573 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 19:04:04 ]
ブルータス!お前もか!

574 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 19:07:45 ]
>>572
スレタイと何か関係あった?

575 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 19:10:06 ]
>>574
完全に誤爆です
すいませんでしt

576 名前:デフォルトの名無しさん [2008/02/26(火) 01:43:14 ]
>>572
原因はお前の頭が悪いこと。
そもそもスレ違い。

577 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 04:30:54 ]
5日も前に誤爆だったと謝罪済みのレスに文句言う馬鹿って一体何考えてるの?

578 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 10:36:12 ]
脊髄で書いてるのだろう



579 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 17:15:56 ]
脊髄電脳化w

580 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:56:57 ]
マルチスレッド対応の
ハッシュリストのソースコードとかある?

581 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:32:38 ]
ハッシュは速いのが売りなんだから、まるごとクリティカルセクションで包んでおけ

582 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:51:50 ]
>>580
Javaのjava.util.concurrent.ConcurrentHashMap

583 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:19:30 ]
javaならHighly Scalable JavaのNonBlockingHashMap等
ttp://sourceforge.net/projects/high-scale-lib

584 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 16:02:03 ]
>>581
意味ねーw

585 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 23:39:30 ]
同期処理なんてしなくてよし。
すべては運任せ。
マルチスレッドの邪神様に任せておきなさい。

586 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 11:34:48 ]
コア1個ならなんとかなるさ、きっと

587 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 21:36:55 ]
●5 コアは一個だが、HTだった

588 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 23:09:15 ]
HTといえば、マルチコアの場合は異なるコア同士が同じキャッシュラインに
アクセスしない方がいいけど、HTの場合は逆になるの?



589 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 23:49:44 ]
マルチプロセッサ・マルチコア・HTで論理CPUが8個とかってどこのXEONだっけ?

590 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 16:41:04 ]
AMDのです

591 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 22:30:10 ]
>>588
キャッシュが共有の場合は、キャッシュラインが同じでもOK。そのほうが効率よい。
キャッシュが分かれている場合は、同じキャッシュラインへの書き込みは最悪になる。MESIプロトコルで具具ってみよう。

592 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 13:50:16 ]
journal.mycom.co.jp/articles/2008/03/02/isscc3/003.html
HTMって性能出るのかな。。

593 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 14:19:28 ]
トランザクションメモリって、
JavaのAtomicReference#compareAndSetみたいなのじゃだめなの?

594 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 16:58:48 ]
失敗したとき、その中でやったことは全部無しにしてくれるんだろうか?
>>593 良い場合もあるけど、例えば、複数のHashMapとかをatomicに操作したい場合は面倒じゃない?

595 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 23:18:48 ]
マルチスレッドなくなってしまう。
今までがずっとCPUだと思っていたものは、実はスレッドなんで、。

596 名前:デフォルトの名無しさん [2008/03/06(木) 02:46:25 ]
Windowsでの条件変数実装の話題蒸し返したいので、俺の調査結果を晒してみる。

apr -> 再帰mutex非サポートぽい?簡潔過ぎるし、他にもバグあるだろ絶対。
yaneSDK3rd::LockObject -> すごく分かりやすい実装。再帰ロックしてのwaitにバグあり。修正は簡単。
boost::condition -> 複雑。完璧なのか?タイムアウト監視にシステム時刻使ってるのが嫌。

自前のC++ライブラリ構築して使ってるが、
yaneSDK3rdベースの実装からboostベースに交換してみようと思って
とりあえず、boost::xtime使ってる部分はGetTickCountに変えた。
システム時刻は某通信プロトコルでいつでも変更されてしまうので。
っつーか、clock()とかにもFILETIME使ってるのってどうなのよ・・・
boost実装に>>473のような問題が無いか検証しようとしてるが、
こいつのアルゴリズムは結構複雑で手強そうだ・・・
肝心のACEのソースはまだ読んでない。

597 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 02:19:24 ]
条件変数の用途って
生産者/消費者的な使い方がかなりの部分を占めると思うんだけど、違うかな?
そういう用途のみに限れば、IOCP使えば充分なんじゃないのかね。
キューにデータがあるときはカーネルに行かないって言明されてるし。

598 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 02:15:16 ]
無知を承知で聞くけど、ユーザーモードに限って言えば
普通はCriticalSection一択じゃないの?
CriticalSection自体がSpinCountの設定次第でカーネルモードにいかないようになってるから
そのチューニングで大体の用途には間に合うと思うんだが。

VistaだとRead/Writeロックが実装されたから、そっち使ったほうが早いかもしれんけど。




599 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 18:32:59 ]
Windowsはあまり知らないんだけど、Enter/Leaveしか出来ないの?

600 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 19:25:08 ]
TryLock もバージョンが↓でなければできる

601 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 09:31:31 ]
VC++Windowsアプリの質問です。
メッセージループを1つのスレッドに隔離しようと思うのですが、
PostQuitMessage(0)を別スレッドから単純に呼び出しても安全でしょうか?

HWND g_hWnd
BOOL g_Active;

// g_Activeをクリティカルセクション内でやり取り
BOOL fGetActive();
VOID fSetActive(BOOL isActive);

INT WINAPI WinMain(...){
fSetActive(TRUE);
g_hWnd = (ウインドウハンドル作成);
メッセージループ用スレッド生成
while( fGetActive() ){
if(...) PostQuitMessage(0);
}
メッセージループ用スレッド後処理
return 0;
}
UINT WINAPI MessageLoop(...){
MSG msg;
msg.hwnd = g_hWnd;
while (GetMessage(&msg, NULL, 0, 0) > 0){
...
}
fSetActive(FALSE);
return 0;
}

602 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 11:40:27 ]
サブスレッドからアプリケーションを直接終了させる設計は変じゃないか。
メインスレッドに何らかのメッセージを送って、メインスレッドからアプリケーションを終了すればよいじゃない。
面倒なら、少々強引だが、PostThreadMessageでメインスレッドに
直接WM_QUITを送りつけるのも。あまりお勧めしないが。

603 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 12:57:27 ]
ウィンドウはそれを作ったスレッドに結びついているよ

604 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:10:12 ]
>>601
PostQuitMessageを別スレッドから呼び出すことは問題ないけど、
メッセージは、ウィンドウの作成元のスレッドにしか来ないよ
別スレッドでGetMessageしたかったら、そっち側でCreateWindowしないとだめ

605 名前:604 mailto:sage [2008/03/16(日) 13:11:34 ]
>PostQuitMessageを別スレッドから呼び出すことは問題ないけど、
って、ウソでした、カレントスレッドにWM_QUITを送るだけか
PostThreadMessageで相手スレッドにWM_QUITを送ればいいかも

606 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:31:10 ]
>>602-605
ありがとうございます。
MSG構造体へメッセージを送る際のデッドロックが心配でした。
>>602
>サブスレッドからアプリケーションを直接終了させる設計は変じゃないか。
ウインドウモードだと×からも終了させる場合があるのと、
メインスレッドのID取得が難しそうなので変えられなそうです。

607 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 22:42:23 ]
>メインスレッドのID取得
プログラム開始時にメインスレッドから GetCurrentThreadId を呼んで、
メインスレッドのIDが取得して、それをグローバル変数にでも入れておけば良いかも。

それがいやなら、メインスレッドにくくりついている非表示ウィンドウを一つ作っておいて、
そこに向かって PostMessage して、メインスレッドにメッセージをポストするのも手。
windowsではよくある話。

608 名前:601、606 mailto:sage [2008/03/17(月) 15:08:05 ]
もう一つ質問させてください。
メインスレッドがウィンドウを持ち、GetMessageのループをしていてかつ、
サブスレッドがメインスレッドのウィンドウにDirect3Dで描画している場合、
GetMessageとDirect3DがHWNDへのアクセス権をもめてクラッシュしますか?



609 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 16:22:56 ]
swapchainでググれ

610 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 17:00:28 ]
サブスレッドでバックバッファに書き込んだ後、
メインスレッドにバッファを転送するべきという意味ですか?
うーん……

611 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 21:18:56 ]
>>608
クラッシュしませんよ。
ただ、例外があって、ディバイスをリセットするときだけはディバイスを作成したスレッドからリセットを
コールしてあげないといけないからその点は注意。
メインスレッドでディバイスを作成した場合は、サブスレッドからはリセットは出来ない。

なので、もし、サブスレッドからディバイスをリセットする場合は、
まず、適当な自作ウィンドウメッセージをサブスレッドからメインスレッドのウィンドウに投げて、
メインスレッドのウィンドウがそれを拾ったらメインスレッド側から
ディバイスをリセットする。


612 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 21:47:01 ]
Linux 2.6.21です
sigwait()しているスレッドに他のスレッドからpthread_cancel()を実行してもスレッドがキャンセルされません
sigwait()はキャンセルポイントのはずなのになぜ、と困惑しています
うちの環境のみなんでしょうか
もしくはLinuxの仕様?

613 名前:612 mailto:sage [2008/03/19(水) 07:24:50 ]
すいません、自分の勘違いでした

614 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 19:48:12 ]
すいません。教えてください。
linux 2.6.20でpthreadです。
sched_get_priority_minとsched_get_priority_maxで優先度の
最大値と最小値を得たところ両方0でした。
これは優先度を選択できないということでしょうか。
優先度の最大値、最小値を得るのに使った引数は
sched_getscheduler(getpid())で値は0でした。
よろしくおねがいします。
あ、あと書き忘れましたがlttng0.9.0のパッチを当ててます。


615 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 20:06:05 ]
>>614
www.linux.or.jp/JM/html/LDP_man-pages/man2/sched_get_priority_max.2.html
>Linux では SCHED_FIFO と SCHED_RR では 1 から 99 の範囲の静的プライオリティーを持ち、
>SCHED_OTHER と SCHED_BATCH ではプライオリティとして 0 を持つ。

616 名前:614 mailto:sage [2008/03/25(火) 21:04:25 ]
ありがとうございます。
優先度を指定しよう思ったらSCHED_FIFOかSCHED_RRにしろということですね。
考えて見ます。


617 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 02:52:53 ]
RTの付いたカーネルじゃないとダメじゃなかったっけ?

618 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 00:04:13 ]
Numaで確保した共有メモリ内に
pthread mutext仕込むと
Numaで共有しているマシン間で
排他取れるの?





619 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 13:08:46 ]
出来ないの?

620 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 22:36:00 ]
教えてくれよw

621 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 07:07:46 ]
POSIX準拠なら取れないとおかしいという結論になるはず。
「NUMAで確保したの共有メモリ」がPOSIX準拠かどうかまでは知ったこっちゃねぇ。

622 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 16:27:39 ]
もし出来ないなら、アドレス空間が共有できてもうれしくないと思うんだが。
割と普通なOpteron複数搭載機ではまる人が続出しそう。

623 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 23:10:05 ]
docs.sun.com/app/docs/doc/819-0390/6n2qp46ei?a=view

この関数ってなんか役に立つの?

624 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 00:11:50 ]
??




625 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 00:19:17 ]
>>623
リード側と書き込み側の間でブロックしにくくなるんじゃないかな?

626 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 00:37:03 ]
>>625
じゃあmutexでおk?

627 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 05:29:38 ]
??

628 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 09:01:57 ]
read同士でblockしない点が有用。



629 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 10:00:18 ]
あるデータAをRWロックでブロックしてるとする

スレッド1がAを読み込もうとしてるときに・・・

スレッド2がAを読み込むことがある
スレッド3がAを書き込むことがある

となっている2つの場合を考える

もしスレッド1と2のみであれば、Aの値は不変のはずだから
1が処理中でも2は処理できる。
つまりRead同士ではブロックする必要がない

しかし、1と2が処理中に3が処理しようとするとおかしくなる。
だから読み込み同士ではブロックないが
書き込みはブロックしないといけない。
これがReadロック。

逆に、3が動いているときに、1と2が読み込もうとしている場合は
3が終わるまでは1も2も読み込んではいけない。
スレッド4が書き込みをしようとしてたとして、これも当然ブロックしないといけない。
つまり排他処理するのがWriteロック。

これをMutexに置き換えると、Read同士でブロックしてしまう可能性があるので
その頻度によってパフォーマンスが落ちることが考えられる。
しかし、とりあえず動かすことが重要であれば、置き換えるだけでも動く。



630 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 12:43:28 ]
マルチスレッドで仕事量分割するための
手法説明している本ってないっすか?

631 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 15:24:51 ]
VC6でマルチスレッドのアプリ作ってるんだがトラウマになりそうだ

632 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 22:27:49 ]
マルチスレッド間で
カスタムメモリアロケタ君を
書きたいけど基本的なロジックとか
みんな何参考にしてるの?

633 名前:デフォルトの名無しさん [2008/04/13(日) 23:00:37 ]
すみません。

デバッグ中に、CPU帯域を独占してるスレッドを特定したいのですが。
なにかいい方法はありませんか?

開発環境はVisualStudio2005で言語はVC++です。


634 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:02:22 ]
パフォーマンスモニタでスレッドIDごとの負荷率が出る。
スレッドIDはデバッガで一時停止のスレッドで見られる


635 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:17:59 ]
>>634
ありがとうございます。
特定できました。

636 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 07:54:17 ]
>>635
特定しました。

637 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 14:08:38 ]
特定しますた

638 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 22:40:16 ]
lock-freeアルゴリズムの
検証方法教えてくれよ

どうやって正当性保障するんだよw
あれ難しすぎだ



639 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 18:56:56 ]
SPINみたいなのを使うんだろうか?

640 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 23:36:09 ]
volatileで十分

641 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 00:52:23 ]
原論文に検証あるだろ?

642 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 21:53:58 ]
それが理解できないから、易しく解説して

って言う話じゃないのかな。

643 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 22:43:36 ]
数式での検証と
実装の検証は違うと思うのは俺だけw?

俺は頭が悪いんだろうなw

644 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 23:37:15 ]
うん、頭が悪い。

「プログラムの正しさの証明」って言われて、
この証明が数学で言う証明のことだと理解できないタイプ。

645 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 07:35:55 ]
実用性ない数式出されてもなぁ
後から付帯条件つきまくる数式
出されてもなぁ


646 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 09:36:27 ]
マジで頭悪そう

647 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:16:26 ]
ここも過疎ってるよなぁw

648 名前:デフォルトの名無しさん [2008/04/23(水) 08:00:42 ]
一覧に無いからだと思うあげ!



649 名前:デフォルトの名無しさん [2008/05/02(金) 17:43:24 ]
自作板にいるキチガイです。シングルスレッドで作成されてるソフトが
カーネルによってマルチコアにスレッド(タスクのことか?)が分散されると申しております。
このIDだけの発言では分かりにくいが、このスレにはシングルスレッドでもマルチコアのほうが早いと
のたまわってるキチガイがいます。
まだまだシングルCPUで頑張る人集合
pc11.2ch.net/test/read.cgi/jisaku/1169829748/

800 Socket774 sage New! 2008/05/02(金) 08:31:32 ID:Aaj/7HlH
このスレのシングルコアユーザーは未だにWindows3.1を使ってるようだw
801 Socket774 sage New! 2008/05/02(金) 08:32:49 ID:Aaj/7HlH
プログラムのスレッドと
CPUが処理する単位のスレッドは
意味が違うw
802 Socket774 sage New! 2008/05/02(金) 08:42:42 ID:Aaj/7HlH
プログラムのスレッドはカーネルによってさらに細分化される
与えられたCPUタイムによってそれを1つづつ実行していく
大まかに2ブロックに分割されたとしよう
1コアが1ブロックを実行してCPU使用権が終了する
その時に2コアが暇をしてるので2ブロックに即座に使用権が渡される
つまり単純に2倍の処理性能になる
806 Socket774 sage New! 2008/05/02(金) 10:52:29 ID:Aaj/7HlH
いやだからマルチスレッドOSって時点で
実際のCPU利用率は半分以下なんだよ
どんだけがんばってもそうなの
シングルコアだったら100%使えるとかないからw
コアが2になるとより100%に近い状態になるわけ
一般に1.8倍だと言われる
MS-DOSやWindows3.1を使ってる人はシングルコアのが早いかもねwww
807 Socket774 sage New! 2008/05/02(金) 10:57:04 ID:Aaj/7HlH
>>803
ベンチマークのような単純処理の繰り返しではスレッドの細分化はほとんど行われない
ゲームみたいな大きなスレッドになると実際に4倍近くの性能を発揮する

650 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 17:51:33 ]
>>649
頭のおかしな人というのはある程度の確率で常にあらわれるものであって、
そういう人がいるのはおかしいとか、説明して頭をよくしてあげよう等の考えは
全くの無駄だと思う。中身の入って無い枝豆同様ハズレとして無視するよりない。
いらいらする気持はわかるけどね。

651 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 17:52:33 ]
コピペ君に応答する奴も馬鹿だな、まで読んだ。

652 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 19:14:41 ]
osのタスク切り替え戦略によってはそうなるかもしれないけど、
普通は強制的な一定タイムスライスじゃないよね。
システムコール待つのにビジーウェイトでもしてると思ってんのか。

653 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 20:14:27 ]
ほかのタスクや割り込み処理に割り込まれる可能性が減る(ほかのCPUに割り振られる)から
「遅くなりにくい」ということはいえるが
速くなることはないだろうなあ。

って件のスレで当人書いてるじゃん

654 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 21:56:31 ]
1coreの時にOS側のタスクによるオーバヘッドが1%程度あったとすると
2coreならアプリの実行時間が1%短くなる程度なら有り得る

655 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 06:58:19 ]
ゲームでならDirectSoundは別スレッドで動いてるので
もうちょっと効果あるかもね。

656 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 08:29:25 ]
例えばX11だと描画はサーバプロセスが行なうから結構効果がありますね。
でもそれをシングルスレッドアプリが速くなると言ってしまうとちょっと違うと思いますが。

657 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 08:33:56 ]
よっぽど単純なプログラムでもない限り
完全なシングルスレッドなんてあり得ないんですけどねw

658 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 08:40:56 ]
たとえばEXCELで
再計算処理が行われてる時にメニューを実行すると
再計算、描画、メニューの3つのスレッドが形成される





659 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 08:47:38 ]
ビス太のユーザーランドスレッドの方針を分かって話してるの?

660 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 12:26:31 ]
スレッドプールのはなし?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<193KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef