• 車種別
  • パーツ
  • 整備手帳
  • ブログ
  • みんカラ+

T_HAJOEのブログ一覧

2011年12月15日 イイね!

マルチスレッド........

某氏が悩んでいたようなのでこっちである程度わかっていることを書き連ねてみたり....

最終的にCPUが処理を行う単位は「タイムスライス」という時間です。
(あくまでもOS側から見た「処理単位」の話、CPU側はマシン語で実行できる単位で処理が行われます)
そのタイムスライスを複数まとめたものを「クォンタム」といい、これが「タスク」を処理する最小単位となります。
(クォンタムのタイムスライスの数はOS毎に異なります)
OSはこのクォンタム毎にタスクを切り替えて見かけ上、複数のタスクを処理しているように見せます。
「スレッド」というのは通常のプログラム上ではタスクと同じになります。
タスク上では複数のスレッドを発生することはできますが、上記処理を行う関係上、複数のスレッドを発生させても実行時間は変わりません。
複数のスレッドを発生させて実行時間を短縮できる可能性があるケースはCPUが「複数」存在するケースとなります。
タイムスライスを実行できる「環境」がCPUに依存しているわけなので同時に複数のタイムスライスを実行するためには複数のCPUが存在する必要があります。
これがマルチスレッドで処理を行う本質です。

で、それを期待してマルチスレッドで処理時間を短縮するプログラムを作るわけですが、これがちょっと面倒です。
基本的にスレッドとスレッドでは同期を取るような仕組みは備わっていません。
もともと異なるタスクを複数のCPUで処理するように作られているためにそれぞれが独立して動作するようになっているためです。
従ってスレッド間の通信を行う必要があります。

例えばAという計算処理とBという計算処理をそれぞれスレッドを立てて実行し、その計算結果を合算するというようなプログラムの場合、AとBの実行速度が異なる場合には合算処理を行うプログラムはどの状態をもってそれぞれの処理が終了しているかを認識できないといけません。
C言語のプログラムを知っている人はちょっと考えると分かると思いますが、グローバル変数は設けないことになっているはずです。(プログラム規約上)
するとローカル変数かポインタで....となるはずですが、どっちも相互に受け渡しをするには結構面倒な作業になることは想像できると思います。

あとはスレッドの構成をちゃんと管理しておかないと最初に終了したスレッドと最後に終了したスレッドの差をできるだけ小さく作らないと無駄な待ち時間が発生してしまいます。





こんなとこかなぁ...........本来の業務はハード屋なんですけどね(笑)

詳細は聞かないでね、概念的に知っているだけなので(笑)
Posted at 2011/12/15 21:36:22 | コメント(1) | トラックバック(0) | 日記

プロフィール

「謹賀新年2024 http://cvw.jp/b/351169/47452271/
何シテル?   01/04 16:08
2007年に11年乗ったBG5からBP5Eに乗り換えました。 車弄りは現在進行形(笑)
みんカラ新規会員登録

ユーザー内検索

<< 2011/12 >>

    123
45678910
11121314 151617
18192021222324
25262728293031

愛車一覧

スバル レガシィツーリングワゴン スバル レガシィツーリングワゴン
2007年6月に納車されてから弄り倒しています。 現在も進行中(笑)

過去のブログ

2024年
01月02月03月04月05月06月
07月08月09月10月11月12月
2023年
01月02月03月04月05月06月
07月08月09月10月11月12月
2022年
01月02月03月04月05月06月
07月08月09月10月11月12月
2021年
01月02月03月04月05月06月
07月08月09月10月11月12月
2020年
01月02月03月04月05月06月
07月08月09月10月11月12月
2019年
01月02月03月04月05月06月
07月08月09月10月11月12月
2018年
01月02月03月04月05月06月
07月08月09月10月11月12月
2017年
01月02月03月04月05月06月
07月08月09月10月11月12月
2016年
01月02月03月04月05月06月
07月08月09月10月11月12月
2015年
01月02月03月04月05月06月
07月08月09月10月11月12月
2014年
01月02月03月04月05月06月
07月08月09月10月11月12月
2013年
01月02月03月04月05月06月
07月08月09月10月11月12月
2012年
01月02月03月04月05月06月
07月08月09月10月11月12月
2011年
01月02月03月04月05月06月
07月08月09月10月11月12月
2010年
01月02月03月04月05月06月
07月08月09月10月11月12月
2009年
01月02月03月04月05月06月
07月08月09月10月11月12月
2008年
01月02月03月04月05月06月
07月08月09月10月11月12月
ヘルプ利用規約サイトマップ
© LY Corporation