Alternative 笑門来福:ITmediaオルタナティブ・ブログ (RSS) Alternative 笑門来福

ソフトウェアは私たちに幸福をもたらすことができるのか

 最近ハイパースレッディングマルチコアのCPUが出てきて、ソフト開発において「マルチスレッド」が話題になることが増えていますが、その一方で「マルチスレッド」に対する誤解も広がっているようです。その誤解とは、「マルチスレッド化=ソフトの高速化」という誤解です。

 さて、この誤解について、良くまとまった記事を以下に2本紹介しておきます。2本とも.NETに関連する記事ですが、.NET以外の環境でも同じことが言えます。

「.NETマルチスレッド・プログラミング入門」(@IT:高木健一氏)より

マルチスレッド化で速度向上が期待できる場面は限られている

 マルチスレッド化によってアプリケーションを高速化できるとよくいわれているが、解説してきたように、実は高速化できる場面もその効果も限られていることが分かっていただけただろう。

 レスポンス・タイムの向上は、最も効果が大きいマルチスレッドによる高速化である。ユーザー・インターフェイスがフリーズする場面や、サーバ的な動作により複数のクライアントからのリクエストに応えなくてはならない場合には、ほぼ慣用的に用いられる。注意しなくてはならないのは、レスポンス・タイムの向上の場合、高速化というのは、あくまでユーザーから見た反応についてであり、実際に処理をすべて完了するまでの時間、つまりスループットは良くならないということである。マルチスレッド化のオーバーヘッドにより、スループットはむしろ悪化する。

 スループットの向上が期待できる場面は、さらに限定的である。マルチプロセッサ環境であれば確かにその向上が期待できるが、Windowsでは、よほど高級なサーバ・マシン以外ではシングルCPUであることが普通で、利用できる環境は限られてくる。遅いデバイスに対するI/Oの待ち時間の利用も、使用できる場面は限られてくるであろう。

「プログラミング C#/15.5 | スレッド操作指針」(Microsoft:MSDN)より

スレッドを使用すべきでないシナリオ

スレッドを初めて使用できるようになったプログラマは、すべてのアプリケーション内でスレッドを使用しようとします。これは、はっきり言ってよくある間違いです。スレッドを使用すると、それに関係する問題も発生します。すべてのプログラミング手段にいえることですが、必要なときにのみスレッドを使用するべきなのです。次のような場面では、複数スレッドの使用を可能な限り避けた方がよいでしょう。

・ 大きすぎるコスト

「15.4 スレッドの安全性と同期」で述べたように、マルチスレッドアプリケーションの設計コストは高くなります。スレッドの安全性を確保できたとしても、効果がなければ意味がありません。開発時間と設計コストを考慮し、複数のスレッドを使用するかどうかを決定すべきです。

・ 不確かなメリット

マルチスレッドアプリケーションを開発した経験がない方は驚くかもしれませんが、スレッド作成とスケジューリングには膨大な CPU オーバーヘッドがかかります。このため、結果として、シングルスレッドアプリケーションの方が高速に動作するようなこともあるのです。すべては処理内容であり、それぞれに独立した処理をスレッドとして分割しているかにかかっています。たとえば、3 個のファイルをハードディスクから読み出すとしましょう。この場合、3 個のファイルの読み出し処理それぞれに、合計 3 個のスレッドを作成してもメリットはまったくありません。理由は簡単です。個々のスレッドは、同一のハードディスクを使用することになるからです。このため、アプリケーションを作成する場合には、シングルスレッドとマルチスレッドの両バージョンを用意し、動作を評価することが大切です。きちんと評価をしたうえで、作業を開始するようにするのです。このような姿勢で臨めば、時間も設計コストも無駄になることはありません。稼動した後で、パフォーマンスの低さを指摘されるようなこともありません。

 これらの記事にあるように、「マルチスレッド」の効果はケースによって違い、またマルチスレッド処理自体にも相当CPUコストがかかるため、必ずしも作動速度の向上が期待できるというわけではありません。

平野洋一郎

Special

- PR -
コメント
なかむ 2005/07/24 16:01

今時そんな誤解している人もいないと思いますけど。

Hirano, Yasuhiro 2005/07/25 03:02

平野さんのブログに、プログラミングのセオリーやノウハウを求めてくる人は少ないと思うのですが...。よっぽど多くの誤解している人が周りにいらっしゃったのでしょうね。(それはそれで心配してしまいます)

私の周りにもこのエントリを見せて質問しましたが、誤解している人は0でした。さらに「HTやマルチコアになると、あながち誤解といえなくなるのでは?」という意見もありました。

平野洋一郎 2005/07/25 08:24

なかむさん、Hiranoさん、コメントありがとうございます。
たぶんお二方はエンジニアの方ではないでしょうか?この話をここで書いたのには理由があって特にエンジニア以外の人に知って欲しいと思ったことがあります。逆にエンジニアの方々に対しては私ごときが出る幕だとは思っていません(笑)。
この件、エンジニアには誤解は少ないのだと思いますが(とはいっても紹介した2本の記事の対象はエンジニアですが:)、最近では、エンジニアではない(例えばプランニング系やマネジメント系の)方々に「マルチスレッド」がより意識されるようになっているようで、実際にこのような誤解に直面して困ったという話を社内外のエンジニアから立て続けに聞きました。そこで、特にエンジニアではない方に「マルチスレッドにしたからといって速くなるとは限らない」ということを知ってもらえればと思ってここで書いたものです。
その理由として、エンジニア向けの記事を紹介したので、エンジニア向けという印象を与えてしまったかもしれません。他に、良い記事があれば紹介してもらえるとありがたいです。

ひろしです 2005/07/25 09:19

私は経験あります.シングルCPUだし,内容的にもマルチスレッド化しても速くならないのに...お客に,やってみなきゃわからないじゃないか!とか言われて...なかなかわかってもらえませんでした(T_T)

Hirano, Yasuhiro 2005/07/25 15:23

エンジニア以外が対象とのことで話が見えてきました。(読解力不足ですみません)
確かに「マルチスレッド化=ソフトの高速化」と誤解しているお客から「マルチスレッドでよろしく」なんていわれたらいい迷惑ですね。でも私だったら、設計の費用に割増料金を載せるし、マルチスレッドとシングルスレッドの両方を比較してほしいなんて要求が来たら工数も2倍もらうだけですけど。(まあ、こういうことが力関係上無理な方々も多くいらっしゃるのも承知していますが...)


コメントを投稿する
メールアドレス(必須):
URL:
コメント:
トラックバック

http://app.blogs.itmedia.co.jp/t/trackback/77444/2802457

トラックバック・ポリシー


» このブログのTOP

» オルタナティブ・ブログTOP



プロフィール

平野 洋一郎

平野 洋一郎

インフォテリア代表取締役社長/CEO。主力製品ASTERIAでシステム開発の新たな形を提案するとともに、OnSheetやHandbookなど新たな分野のソフトウェアに挑戦する。

詳しいプロフィール

カレンダー
2012年2月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      
カテゴリー
エンタープライズ・ピックアップ

news094.gif ストレス社会との付き合い方
政府がメンタルヘルス検査の義務化を検討しています。しかしうつになった後だけではなく、なる前の予防も大切なのではないでしょうか。(5/24)

news094.gif 「思いやり経営」のススメ
産学・NPO連携の民間団体が先頃、「思いやり経営」という観点で評価した指標や企業ランキングを発表した。企業のマネジメント力を知る手立てとして注目されそうだ。(5/24)

news094.gif テレワークが労働者のマインドを変える
テレワークが普及すると、労働者の評価は従来の「時間×生産性」から「成果」へと変化する。時間や場所を自分の裁量でコントロールできる変わりに、成果を最大化するために労働をマネジメントする能力とマインドが労働者には必要になる。(5/23)

news094.gif 求む、クックパッド男子
高身長も高学歴も高収入もいらない。私が男性に求めるのは「料理の腕」だけです。(5/18)

news094.gif 37歳の常識――我々は一生学び続ける
学び続けなければ衰退するのみだ。(5/18)

オルタナティブ・ブログは、専門スタッフにより、企画・構成されています。入力頂いた内容は、アイティメディアの他、オルタナティブ・ブログ、及び本記事執筆会社に提供されます。

Special

- PR -

サイトマップ | 利用規約 | プライバシーポリシー | 広告案内 | お問い合わせ