マルチスレッドプログラミングの使い道についてなのですが・・・
自分は、長らく「マルチスレッド = 高速化」と考えてきたのですが、なんだか違うような気がしてきました。
マルチスレッドは高速化を保証するものですか?
しかし、スレッドの実行はカーネルのプロセススケジューリングアルゴリズムによって管理されています。
前回の質問でraccyさんが言っている事と重なるのですが・・・
スレッドセーフな関数について
同時に一つのスレッドしか動かないという部分ですね。
これはつまり、時間的に重なる部分だけが高速化されるということになると思います。
同時に重なることがなく時分割で複数のコアにスレッドが割り当てられた時と1つのプロセスを比較的長い時間コアに割り当てるのでは性能に差が出ないという考えです。
複数のコアに同時に割当られた時のみ高速化される。という意味ですね。(効果が薄いような・・・)
これは、カーネルのスケジューリングアルゴリズムに従うため確率的なものですよね??
マルチスレッドは確率的に速度向上が期待できますよ・・・という程度の話では?
性能の上限については以下を
アムダールの法則
ある一点に到達するとそれ以上コアを増やしても性能は向上しないという上限ですね。
私の持っている本にこうあります。
GUIライブラリでは、大部分の関数は特定のスレッドからのみ呼び出されることになっており、これはイベントスレッドと呼ばれる。
このように実装することで、GUIライブラリ内のコードが内部データ構造に対する全てのアクセスをロックするコストを免れている。
イベントスレッドというのは初めて知ったのですが、要は**マルチスレッドで組む理由は高速化以外に何があるのか??**という疑問です。
つまり具体的な使い方です。
またマルチスレッドの最も優れている点を教えてください。
(上記にも書いたのですが、最も優れている点は本当に高速化なのかぁ?という疑問ですね。)
「追記」
マルチプロセス化を行う理由
マルチプロセスと書いてあるのですが、マルチスレッドでも同じ事だと思います。
セキュリティという観点もあるようですね。
回答8件
あなたの回答
tips
プレビュー